标签:not margin 对象 条件 特定 执行 notifyall 任务 应该
P706)必须用一个检查感兴趣的while循环包围wait()。其本质就是要检查所感兴趣的特定条件,并在条件不满足的情况下返回到wait()中。
P707)notify()与notifyAll()
使用notify()时,在众多等待同一个锁的任务中只有一个会被唤醒,因此如果你希望使用notify(),就必须保证被唤醒的是恰当的任务。另外,为了使用notify(),所有任务必须等待相同的条件,因此如果你有多个任务在等待不同的条件,那么你就不知道是否会唤醒了恰当的任务。如果使用notify(),当条件发生变化时,必须只有一个任务能够从中受益。最后,这些限制对所有可能存在的子类都必须总是起作用的。如果这些规则中有任何一条不满足,那么你就必须使用notifyAll()而不是notify()。
notifyAll()将唤醒“所有正在等待的任务”。这是否意味着程序中任何地方,任何处于wait()状态中的任务都将被任何对notifyAll()的调用唤醒呢?事实上,当notifyAll()因某个特定锁而被调用时,只有等待这个锁的任务才会被唤醒。
P707)Timer
1 Timer timer = new Timer(); 2 timer.scheduleAtFixedRate(new TimerTask() { 3 @Override 4 public void run() { 5 //... 6 } 7 }, 400, 400); 8 timer.cancel();
P711)使用显式的Lock和Condition对象
使用互斥并允许任务挂起的基本类是Condition,你可以通过在Condition上调用await()来挂起一个任务。当外部条件发生变化,意味着某个任务应该继续执行时,你可以通过调用signal()来通知这个任务,从而唤醒一个任务,或者调用signalAll()来唤醒所有在这个Condition上被其自身挂起的任务(与使用notifyAll()相比,signalAll()是更安全的方式)。
P713)生产者-消费者与队列
LinkedBlockingQueue——无界队列
ArrayBlockingQueue——确定的、固定的尺寸
SynchronousQueue——尺寸固定为1
标签:not margin 对象 条件 特定 执行 notifyall 任务 应该
原文地址:http://www.cnblogs.com/ITStruggler/p/7091300.html