packagecom.shuys.juc;/**
*在此案例中多线程执行的时候,在使用i判断条件,进入wait()方法后,及时中断
等待也不会再继续进行判断,而while()会重新进行判断执行
**/classAir{privateint h=0;publicsynchronizedvoidincrement()throwsException{//如果用if作为条件判断则会产生虚假唤醒while(h !=0){this.wait();}
h++;this.notify();System.out.println(Thread.currentThread().getName()+":"+h);}publicsynchronizedvoiddecrement()throwsException{while(h ==0){this.wait();}
h--;this.notify();System.out.println(Thread.currentThread().getName()+":"+h);}}publicclassAirConditioner{publicstaticvoidmain(String[]args){Air air =newAir();newThread(()->{for(int i =0; i <10; i++){try{
air.increment();}catch(Exception e){
e.printStackTrace();}}},"a").start();newThread(()->{for(int i =0; i <10; i++){try{
air.decrement();}catch(Exception e){
e.printStackTrace();}}},"b").start();newThread(()->{for(int i =0; i <10; i++){try{
air.increment();}catch(Exception e){
e.printStackTrace();}}},"c").start();newThread(()->{for(int i =0; i <10; i++){try{
air.decrement();}catch(Exception e){
e.printStackTrace();}}},"d").start();}}
多线程的虚假唤醒package com.shuys.juc;/***在此案例中多线程执行的时候,在使用i判断条件,进入wait()方法后,及时中断等待也不会再继续进行判断,而while()会重新进行判断执行**/class Air { private int h=0; public synchronized void increment() throws Exception{ //如果用if作为条件判断则会产生虚假唤醒 while (h != 0) {