本帖最后由 sanguodouble1 于 2014-3-5 13:42 编辑
谁在调用?就是他自己,因为任何类其实都是Object的子类,如果写成this.wait()就一目了然了吧。
wait()方法,和notify()方法组合使用
这个怎么说呢,举个例子吧:
现在有一个房间(代表一个对象),
房间可以看电视(代表对象里的方法),
有三个路人ABC(代表3个线程),
门锁(代表关键字synchronized),
房东(代表关键字this)
但现在有个情况,就是当有人在看电视的时候,不允许其他人来换台,所以房东为了达到这种目的,就在房门上装了一个锁(就是关键字synchronized)
这时如果你想看电视,就需要这把锁的钥匙,
比如A拿到了这把钥匙,进去看电视了,看了很久,房东说:“你丫的,你都看这么久了,也给别人看一下”,所以就叫A去外面等着,不叫他不许进来。
这种现象,用代码表示,就是this.wait();
然后他把钥匙给了其他在等待的B、C中的其中一个,B力气大,抢到了钥匙。
这种现象,用代码表示,就是this.notify();
又过了一会了,房东说,现在播放新闻联播,你们每人都需要深入学习,就又拿出了两把钥匙,就让房间外面的A和C都进来了
这种现象,用代码表示,就是this.notifyAll();
说到这里,你大概了解了吧,wait()方法,wait的不是对象本身,而是正在访问当前对象的某个线程,同理,notify()方法,叫醒的是等待在这个对象上的线程
而monitor是当前对象的监听器,通过他,可以知道现在哪个线程在访问当前对象 |