java 线程可谓是java中重要的一个机制,在说线程之前需要知道什么是进程,进程和线程的关系是是什麽?

1.什么是进程?什么是线程?

  进程:用句简单的粗俗的来说,进程就是程序。进程是一个正在运行的程序!比如:打开一个记事本程序,那么这个正在运行的记事本程序就是一个进程。

  线程:线程是由进程所创建来执行某个功能的一个机制。那么也就是说,没有进程就没有线程。一个线程只能对应一个进程,一个进程却可以有多个线程的存在。

2.那么在java中如何创建一个线程?

  在java中创建线程有两个方法:

    一:通过类继承Thread实现线程创建。

    例:class Thread1 extends Thread {

        public void run() {

          System.out.println("hello, the world!");

        }

      }

      public class Text {

        public void main(String[] args) {

            new Thread1().start();

        }

      }

  二:通过实现Runnable来创建线程

  例:class Tread2 implements Runnable {

      public void run() {

        System.out.println("wellcome to Java world!");

      }

    }

    public void Text {

      public void main(String[] args) {

        new Thread(new Thread2()).start();

      }

    }

  同样两种方法都可以通过匿名内部类的方式创建线程。

3. sleep()和wait()是什麽?他们有什么区别,对同步有什么影响。

  sleep():是线程的一个睡眠方法,它可以接收long类型的参数作为睡眠的时间!当线程运行该方法时,线程会进入睡眠状态,把cpu时间片让出给其他线程使用。当参数时间之后,线程会自动唤醒,等待下一个时间片段继续执行。在睡眠期间,sleep()不会释放线程锁,也就是或,该线程所访问的同步块会一直被该线程占用,别的线程无法访问,直到线程重新启动,并释放线程锁。

  wait():是属于Object的类,wait()和sleep()都是使线程进入睡眠状态,但是wait()需要别的线程去使用Thread.notify()唤醒被wait()睡眠的线程,否则线程会一直处于睡眠状态,知道程序关闭。如果该线程正占用着同步资源,那么一直不唤醒,就会导致同步资源无法访问,避免这样,所以当wait()睡眠的线程会释放线程锁,让出cpu时间片段,当被唤醒的时候,该线程会重新等待下一次时间片段,重新进入同步块。

4.几个常用的线程方法

  Thread th = Thread.currentThread();  用于获取运行当前代码片段的线程

  long getId()  返回该线程的标识符

  String getName()  返回该线程的名称

  int getPriority()  返回线程的优先级

  Thread.state getState();  获取线程的状态

  boolean isAlive();  测试线程是否处于活动状态

  boolean isDaemon();  测试线程是否为守护线程

  boolean isInterrupted();  测试线程是否已经中断

      

java 多线程,sleep()和wait()的更多相关文章

  1. 40个Java多线程问题总结

    前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...

  2. Java多线程基础知识篇

    这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...

  3. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  4. Java多线程系列--“JUC锁”04之 公平锁(二)

    概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...

  5. Java多线程--让主线程等待子线程执行完毕

    使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...

  6. Java多线程 2 线程的生命周期和状态控制

    一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...

  7. java 多线程 1 线程 进程

    Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报  分类: javaSE综合知识点(14)  版权声明:本文为博主原创文章,未经博 ...

  8. 一起阅读《Java多线程编程核心技术》

    目录 第一章 Java多线程技能 (待续...)

  9. 第一章 Java多线程技能

    1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...

  10. java从基础知识(十)java多线程(下)

    首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...

随机推荐

  1. UITableView 自带编辑删除 自己定义button

    一:UITableView 自带编辑删除 1:实现两个方法就可以 #pragma mark   tableView自带的编辑功能 -(void)tableView:(UITableView *)tab ...

  2. angular.js 入门

    1.安装nodejs 首先要安装nodejs,如果你的电脑已经装过了,最好确认是比较新的版本,否则可能会出问题. 没有安装的直接去nodejs官网下载nodejs安装.安装过程很简单,官网有教程. 安 ...

  3. java操作redis学习(一):安装及连接

    文章参考自:http://www.cnblogs.com/edisonfeng/p/3571870.html,在此基础上进行了修改. 一.下载安装Redis redis官网显示暂时不支持Windows ...

  4. Linux机器间ssh免密登录

    前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...

  5. EasyDarwin实现RTSP播放动态认证的两种方式:Basic/Digest & Token

    问题描述 目前为了能够方便开发者,我们将EasyDarwin中的RTSP认证过程直接忽略过了,如果要开启认证的方式,我们可以在代码中打开: case kRoutingRequest: { // Inv ...

  6. EasyPusher实现Android手机屏幕桌面直播,实时推送操作画面,用于手游直播等应用

    本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/52651194 由于Android 5.0提供了捕获 ...

  7. Java类加载器(死磕 1-2)

      Java类加载器(  CLassLoader ) 死磕 1.2:  导入 & 类加载器分类 本小节目录 1.导入 1.1. 从class文件的载入开始 1.2. 什么是类加载器 2. JA ...

  8. 6.5.1.3 Caching SHA-2 Pluggable Authentication

    MySQL :: MySQL 8.0 Reference Manual :: 6.5.1.3 Caching SHA-2 Pluggable Authentication https://dev.my ...

  9. Android笔记之dp与px之间的转换以及LayoutParams

    dp与px之间的转换公式 px = dp * (dpi / 160) dp = px / (dpi / 160) 其中dpi的获取方式如下 private void getDpi() { Displa ...

  10. x264 FFmpeg Options Guide

    https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping x264 FFmpeg Options Guide Please Not ...