虚假唤醒
例子
wait()是object类自带的方法,在jdk有介绍,有可能出现中断、虚假唤醒
也就是在下面的例子中
if(number != 0){ this.wait(); }
当线程成功进入if语句块中,发生了中断,cpu跑去调度别的进程了,再次调度这个线程的时候,应该需要再经历一次if的判断,但是并没有这样做。
于是下面的程序运行结果:
/**
* @author zkw
* @Description TODO
*
*/
public class ThreadWaitNotify {
public static void main(String[] args) {
Resource resource = new Resource();
//increment
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
resource.increment();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"A-1").start();
new Thread(()->{
for (int i = 0; i < 10; i++) {
try {
resource.increment();
} ca