第五章倒计时门闩介绍.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 线程同步障栅 概述 在多线程程序中,很多时候需要让多个线程互相合作完成一个任务,这要求线程间能够进行协调。 例如,任务A,B,工作。 障栅相当于程序中的一个集合点,当结果在中间步骤需要整合的时候会经常用到它。当线程需要等待其他线程时,可以让该线程运行到障栅处,一旦所有线程都到达了这个障栅,障栅就撤销,线程可以继续向下运行。 例如,同学们早晨跑操前的集合,和同学们都集中到一个教室上课。 5.1 障栅 类CyclicBarrier是一个同步辅助类,实现了一个称为障栅的集合点,在不是所有线程都到达集合点之前,线程之间可以互相等待。 注意:1)障栅释放后可以循环使用。 2)类CyclicBarrier比较适合于线程数量固定的情况。 类CyclicBarrier的构造方法如下: //创建一个CyclicBarrier对象,parties为等待的线程个数 CyclicBarrier(int parties) //创建一个CyclicBarrier对象,parties为等待的线程个数,barrierAction定义最后一个进入障栅的线程要执行的动作。 CyclicBarrier(int parties,Runnable barrierAction) 例如: CyclicBarrier barrier=new CyclicBarrier(4); 表示创建了一个障栅,只有四个线程都到达了障栅后,才能继续向下运行,。 类CyclicBarrier常用方法 注意: await方法需要放置到try...catch...语句块中,捕获异常。线程在完成了自己的任务之后,就会调用await方法等待。但最后一个线程调用await方法后,将唤醒所有等待的线程,并继续该障栅点之后的工作。 public void run(){ ...//需要处理的任务 try{ barrier.await(); }catch(InterruptedException|BrokenBarrierException){ e.printStackTrace(); } } 5.2 倒计时门闩 倒计时门闩就像一个带计数开关的门,只有在门前等待的线程达到一定的数量,门闩才会打开,线程才可以继续执行。 倒计时门闩由类CountDownLatch实现,可以通过一个给定的值进行初始化,通常在同步状态中保存的是当前的计数值,线程调用await方法等待,方法countDown会导致计数值递减,当计数值为零时,所有在倒计时门闩范围内等待的线程的阻塞状态将解除。 类CountDownLatch的构造方法如下: CountDownLatch(int count) 其中,count为初始计数,必须为正数,否则将抛出异常。 类CountDownLatch的常用方法 倒计时门闩与障栅的区别 不是所有线程都需要等待门闩打开; 门闩可以由外部事件打开 倒计时门闩是一次性的,一旦计数器为0,就不能再重用了。 5.3 信号量 5.3 信号量 信号量机制通常用于限制对于某种资源同时访问的线程数量。 在Java并发库中,类Semaphore可以实现信号量机制,定义如下: public class Semaphore extends Object implements Serializable 许可集合(Permit) 一个信号量管理了一个许可(Permit)集合,可以通过方法acquier获取一个许可,如果没有许可可以使用,则等待。通过方法release可以释放一个许可。 它的构造方法定义如下: Semaphore(int permits)//用给定的许可数创建一个Semaphore对 象 Semaphore(int permits,boolean fair) //用给定的许可数创建一个Semaphore对象,并可以设定公平参数fair。参数fair可以取值为true或false,指明当有许可可用时,是采用公平策略还是非公平策略来获取许可。公平策略可以保证每个线程都能获得许可,对于防止线程出现“饥饿”现象是有帮助的。 类Semaphore常用方法 5.4 同步队列 同步队列是一个没有数

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档