实现生产者消费者问题要使用while循环,不可以使用if否则会导虚假唤醒。
用synchronized实现生产者和消费者用的是wait和notify,用lock可以调用newCondition方法用的是await和signal而且可以让线程交叉执行
lock lock = new reantlock()
condition condition =lock.newCondition
condition.await()
condition.signal()
synchronized加在普通方法锁的是当前的对象,即方法的调用者,锁的执行顺序是先拿到锁先执行,如果新建两个对象调用锁的方法那么默认先按顺序 如果一个阻塞了则先执行另一个。
synchronized锁的是静态方法时锁的是class对象,一个类只能有一个class对象,如果说既调用了锁的静态方法又调用了普通锁方法,不管哪个在前哪个在后一定会先执行静态的那
个 ,如果一个锁的静态方法被两个对象调用了,那么默认先按顺序 如果一个阻塞了则先执行另一个。
synchronized方法体比较便捷,就是想锁普通就锁普通,相锁类就锁类