lock锁,synchronize锁,区别,锁的详解(生产者,消费者)


 

 传统方式:synchronize,锁class,锁对象

 

 

 根本就是因为if只判断了一次,就等待了,不会继续等待,而while就继续判断,不会同时唤醒的,而导致其中一个正常,另一个继续也执行,导致虚假唤醒

 就是用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运行if代码块之后的代码,而如果使用while的话,也会从wait之后的代码运行,但是唤醒后会重新判断循环条件,如果不成立再执行while代码块之后的代码块,成立的话继续wait。