网站的备案要求,软件开发,网络推广怎么干,设计类专业笔记本电脑推荐等待唤醒机制线程的状态NEW 至今尚未启动的线程处于这种状态RUNNABLE 正在Java虚拟机中执行的线程处于这种状态BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态WAITING 无限期的等待另一个线程来执行某一待定操作的线程处于这种状态TIMED_WAITNG 等待另一个线程来执行取…等待唤醒机制线程的状态NEW 至今尚未启动的线程处于这种状态RUNNABLE 正在Java虚拟机中执行的线程处于这种状态BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态WAITING 无限期的等待另一个线程来执行某一待定操作的线程处于这种状态TIMED_WAITNG 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态TERMINATED 已退出的线程处于这种状态。阻塞状态具有cpu的执行资格等待cpu空闲时执行休眠状态放弃cpu的执行资格cpu空闲也不执行等待唤醒案例分析public static void sleep(Long millis):使用当前正在执行的线程以指定的毫秒数暂停(暂停停止执行).毫秒数结束之后线程继续执行等待唤醒案例线程之间的通信创建一个顾客线程(消费者)告知老板要包子的中类和数量调用wait方法放弃cpu的执行进入到WAITNG状态(无限等待)创建一个老板线程(生产者)花了5秒做包子做好包子之后调用notify方法唤醒顾客吃包子注意顾客和老板线程必须使用同步代码块包裹起来保证等待和唤醒只能有一个在执行同步使用的锁对象必须保证唯一只有锁对象才能调用wait和notify方法Object类中的方法void wait()在其他线程调用此对象的notify()方法或notify() 方法前导致当前线程等待。void notify()唤醒在此对象监视器上等待的单个线程。会继续执行wait方法之后的代码public class CaiNiao{ public static void main(String[] args){ //创建锁对象保证唯一 Object obj new Object(); //创建一个顾客线程(消费者) new Thread(){ Override public void run(){ //一直等着买包子 while(true){ //保证等待和唤醒的线程只能有一个执行需要使用同步技术 syncharonized (obj){ System.out.println(告知老板要的包子的种类和数量); //调用wait方法放弃cpu的执行进入到WAITNG状态(无限等待) try{ obj.wait(); }catch (InterruptedException e){ e.printStackTrace(); } //唤醒之后执行的代码 System.out.println(包子已经做好了开吃); System.out.println(--------------); } } } }.start(); //创建一个老板线程(生产者) new Thread(){ Override public void run(){ //一直做包子 while(true){ //花5秒做包子 try{ Thread.sleep(5000);//花5秒做包子 }catch(InterruptedException e); e.printStackTrace(); } //保证等待和唤醒只能有一个在执行,需要使用同步技术 syncharonized (obj){ System.out.println(花了5秒做包子做好包子之后调用notify方法唤醒顾客吃包子); //做好包子之后调用notify方法唤醒顾客吃包子 obj.notify(); } } }.start(); } Object类中wait带参方法和notify进入到TimeWaiting(计时等待)有两种方法使用sleep(Long m)方法在毫秒值结束之后线程睡醒进入到Runnable/Blacked状态使用wait(Long m))方法wait方法如果在毫秒值结束之后还没有被notify唤醒就会自动醒来线程睡醒进入到Runnable/Blacked状态唤醒的方法void notify()唤醒在此对象监视器上等待的单个线程。void notifyAll()唤醒在此对象监视器上等待的所有线程。调用wait和notify方法需要注意的细节wait方法与notify方法必须要由同一个锁对象调用。因为对应的锁对象可以通过notify唤醒使用同一个锁对象调用的wait方法后的线程wait方法与notify方法是属于Object类的方法的。因为锁对象可以是任意对象而任意对象的所属类都是继承了Object类的。wait方法与notify方法必须要在同步代码块或者是同步函数中使用。因为必须要通过锁对象调用这两个方法。