本帖最后由 罗会涛 于 2012-11-29 15:04 编辑
不是太明白楼主的意思,不知道我理解的对不对.
notEmpty,notFull只是两个名字,可以随便起,只是为了写程序的人容易看.
但是他们都是lock上的Condition(即监视器).当程序运行到notFull.await()或者notEmpty.await()时该线程就得进入等待(即wait)状态.
notFull.await()可以理解为:当前线程等待,并且上面挂一个监视器叫notFull,它自己就醒不了了,必须Interrupt或者等着别人叫醒.(notEmpty.await()也是同样的)
由于lock允许有多个监视器,所以就相当与可以给线程起名字,线程运行到哪个XXX.await(),它就相当于一个叫XXX的线程等待了,一般就只能等着其它线程用XXX.signal()来特定叫醒.
你问是什么时候判断监视器的归属,我想应该是程序运行的时候吧,run方法不运行,怎么会执行线程里面的代码呢. |