Java 同步模式 (2) —— wait和notify/notifyall
Java 同步方式 (2) —— wait和notify/notifyallJava 中除了关键字 synchronized 能够实现同步外,还可以使用
Java 同步方式 (2) —— wait和notify/notifyall
Java 中除了关键字 synchronized 能够实现同步外,还可以使用wait和notify/notify实现同步。
wait 方法就是使拥有当前对象(Object)的线程(Thread)放弃锁(release lock).进入睡眠状态.
notify 通知在对象(Object)上因调用wait而等待的某一进程启动.
notifyAll 通知在对象(Object)上因调用wait而等待的所有进程启动.这些进程根据优先级顺序执行.
首先两个线程启动,他们的执行占用CPU多少随机.但是这里因为加了一个锁的Boolean型变量,而控制了put与set.
首先:创建了一个对象Q,创建了一个Producer,一个Consumer,这两个对象在构造方法中启动了线程.
第一步:
对于Producer来说,会首先去调用put方法,因为valueSet是默认值是false,所以在Q的put方法不执行wait而是执行。执行完毕后设置为true.
对于Consumer来说,会首先去调用get方法,因为valueSet是默认值是false,所以该线程会wait.
第二步:
对于Producer来说,因为valueSet已经变成true,所以会wat.
对于Consumer来说,因为valueSet已经变成true,所以会执行下面的code(get value),然后设置valueSet为false.
第三步:
Producer执行put方法,因为valueSet为True
Consumer等待
依次类推,方法执行...
这里关键是加了一个共享的变量,valueSet来判是该取值get,还是put值.当然有了wait跟notify才使它成为了可以实现的。
但是不管怎样,wait是使目前控制该对象的线程wait(等待),notify是使前面在该对象上面wait的方法继续执行.