加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

让线程按顺序执行8种方法

发布时间:2019-09-05 17:59:01 所属栏目:建站 来源:俊俊的小熊饼干
导读:一.前言 本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。使用的方法如下: [1] 使用线程的join方法[ 2] 使用主线程的join方法 [3] 使

Condition(条件变量):通常与一个锁关联。需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例。

  • Condition中await()方法类似于Object类中的wait()方法。
  • Condition中await(long time,TimeUnit unit)方法类似于Object类中的wait(long time)方法。
  • Condition中signal()方法类似于Object类中的notify()方法。
  • Condition中signalAll()方法类似于Object类中的notifyAll()方法。

应用场景:Condition是一个多线程间协调通信的工具类,使得某个,或者某些线程一起等待某个条件(Condition),只有当该条件具备( signal 或者 signalAll方法被调用)时 ,这些等待线程才会被唤醒,从而重新争夺锁。

让线程按顺序执行8种方法
让线程按顺序执行8种方法

运行结果:这里输出会有很多种顺序,主要是因为线程进入的顺序,造成锁住线程的顺序不一致

  1. 早上: 
  2.  
  3. 产品经理来上班了 
  4.  
  5. 测试人员来上班了 
  6.  
  7. 开发人员来上班了 
  8.  
  9. 领导吩咐: 
  10.  
  11. 首先,产品经理规划新需求… 
  12.  
  13. 然后,开发人员开发新需求功能… 
  14.  
  15. 最后,测试人员测试新功能… 
  16.  
  17. 产品经理规划新需求 
  18.  
  19. 开发人员开发新需求功能 
  20.  
  21. 测试人员测试新功能 

6.使用线程的CountDownLatch(倒计数)方法

CountDownLatch:位于java.util.concurrent包下,利用它可以实现类似计数器的功能。

应用场景:比如有一个任务C,它要等待其他任务A,B执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

让线程按顺序执行8种方法
让线程按顺序执行8种方法

运行结果

  1. 早上: 
  2.  
  3. 产品经理来上班了 
  4.  
  5. 测试人员来上班了 
  6.  
  7. 开发人员来上班了 
  8.  
  9. 领导吩咐: 
  10.  
  11. 首先,产品经理规划新需求… 
  12.  
  13. 然后,开发人员开发新需求功能… 
  14.  
  15. 最后,测试人员测试新功能… 
  16.  
  17. 产品经理规划新需求 
  18.  
  19. 开发人员开发新需求功能 
  20.  
  21. 测试人员测试新功能 

7.使用CyclicBarrier(回环栅栏)实现线程按顺序运行

CyclicBarrier(回环栅栏):通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。

应用场景:公司组织春游,等待所有的员工到达集合地点才能出发,每个人到达后进入barrier状态。都到达后,唤起大家一起出发去旅行。

让线程按顺序执行8种方法
让线程按顺序执行8种方法

运行结果

  1. 早上: 
  2.  
  3. 产品经理来上班了 
  4.  
  5. 测试人员来上班了 
  6.  
  7. 开发人员来上班了 
  8.  
  9. 领导吩咐: 
  10.  
  11. 首先,产品经理规划新需求… 
  12.  
  13. 然后,开发人员开发新需求功能… 
  14.  
  15. 最后,测试人员测试新功能… 
  16.  
  17. 产品经理规划新需求 
  18.  
  19. 开发人员开发新需求功能 
  20.  
  21. 测试人员测试新功能 

8.使用Sephmore(信号量)实现线程按顺序运行

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读