2
回答
多线程 wait(),notify()和notifyall()咨询
终于搞明白,存储TCO原来是这样算的>>>   

两个线程交替打印,两个线程都在做的就是 状态判断(暂且不提),还有就是进入冻结状态(wait() ),之后改状态,notify(),线程已经wait了,还可以调用notify?求解!!还有notify()可以唤醒线程池中wait中的任意线程(任意线程难道不包括刚刚wait的线程吗)

notifyall(),也是同问,唤醒全部

<无标签>
举报
msgyg
发帖于1个月前 2回/46阅
首先,两个线程开始执行后,肯定不可能同时执行,肯定会有间隔差距,第一个线程A判断后发现不满足进入等待的条件,就开始执行代码了, 于此同时线程A的执行权被另一个线程B夺去,线程b中检查发现满足进入等待的条件,于是进入等待,此时,执行权又被A夺去,A执行完代码并唤醒B,当然执行代码过程中由于用了synchronized 所以会保证执行权不被夺去。 我这纯属胡扯,请以批判的眼光看待

1、上面的几个方法都必须包在sychronized块中

2、因此,对于同一个monitor实例来说,不会出现多个线程并发调用它的这些线程同步的方法

3、每个线程要调用这些方法都必须:先synchronized阻塞,然后等到自己获取到锁,然后调用monitor实例的notify方法,此时,其它线程多半都在等待synchronized的同步锁,因为当前线程没有释放呢,所以其它线程还是blocked状态(虽然从wait状态唤醒了,但是因为没有得到锁,所以是blocked状态,不能执行),然后当前线程继续执行,wait,然后虽然当前线程在synchronized同步块中,但是因为调用了wait方法,所以,会释放这个synchronized同步锁,然后其它的某个线程就得到锁了,从而可以继续执行了。。。。。

有什么不清楚的,可以继续问我,建议对照代码理解。

顶部