码迷,mamicode.com
首页 > 编程语言 > 详细

Java并发4

时间:2017-06-28 20:28:02      阅读:105      评论:0      收藏:0      [点我收藏+]

标签: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

 

Java并发4

标签:not   margin   对象   条件   特定   执行   notifyall   任务   应该   

原文地址:http://www.cnblogs.com/ITStruggler/p/7091300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!