在多线程里用notify的时候,一定要和wait联合起来看,单看任何一个都是没有意义的。wait和notify是配套的,也只有wait之后才会有notify,这也是是多线程之间的通信机制。就像你觉得肚子饿了,给你同事说,我们等会去吃饭,你半个小时叫我,在半个小时后,你同事叫了你,然后你去吃饭。但是这里有个不同的东西就是notify和wait都需要某个Object的锁才会有意义,也就是说这种通信必须被置于同步块中。这是对象锁的概念,也就是说线程A和B要工作都要获得同一对象的锁,不然是没有意义的。
关于你提出的问题到底唤醒谁,其实默认情况下是由JVM来决定的,你是无法控制的,但是他和线程的优先级以及谁先wait是有关系的,不过不是绝对的,因为每个JVM在不同平台上表现可能有差异,这个没法决定。 |