问题描述:A任务执行完之后执行B任务,B任务执行之后再执行C任务,C任务执行完之后A再执行任务,以此循环下去

Task

 1 package com.ydd.work.concurrent;
 2
 3 import java.util.concurrent.atomic.AtomicInteger;
 4 /**
 5  *
 6  * @author yunzhu.ydd
 7  *
 8  */
 9 public  class Task extends  Thread {
10
11     protected AtomicInteger flag;
12     private int number;
13     private int id;
14     public Task( AtomicInteger flag,int number,int id)
15     {
16         this.flag=flag;
17         this.number=number;
18         this.id=id;
19     }
20    @Override
21     public void run() {
22      while(!Thread.interrupted())
23      {
24          synchronized(flag)
25          {
26              while(flag.get()!=id)
27              {
28                  try {
29                     flag.wait();
30                 } catch (InterruptedException e) {
31                     // TODO Auto-generated catch block
32                     e.printStackTrace();
33                 }
34              }
35           }
36          System.out.println("第"+id+"个任务在执行....");
37          //其他的任务
38          synchronized(flag)
39          {
40           flag.set((flag.get()+1)%number);
41            flag.notifyAll();
42          }
43      }
44
45     }
46
47 }

Main

package com.ydd.work.concurrent;import java.util.concurrent.atomic.AtomicInteger;
/*** * @author yunzhu.ydd**/
public  class Task extends  Thread {protected AtomicInteger flag;private int number;private int id;public Task( AtomicInteger flag,int number,int id){this.flag=flag;this.number=number;this.id=id;}@Overridepublic void run() {while(!Thread.interrupted()){synchronized(flag){while(flag.get()!=id){try {flag.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}System.out.println("第"+id+"个任务在执行....");//其他的任务synchronized(flag){flag.set((flag.get()+1)%number);flag.notifyAll();}}}}

  结果:

第2个任务在执行....
第3个任务在执行....
第4个任务在执行....
第5个任务在执行....
第6个任务在执行....
第7个任务在执行....
第8个任务在执行....
第9个任务在执行....
第0个任务在执行....
第1个任务在执行....
第2个任务在执行....
第3个任务在执行....
第4个任务在执行....
第5个任务在执行....
第6个任务在执行....
第7个任务在执行....
第8个任务在执行....
第9个任务在执行....
第0个任务在执行....
第1个任务在执行....
第2个任务在执行....
第3个任务在执行....
第4个任务在执行....
第5个任务在执行....
第6个任务在执行....
第7个任务在执行....
第8个任务在执行....
第9个任务在执行....
第0个任务在执行....
第1个任务在执行....
第2个任务在执行....
第3个任务在执行....
第4个任务在执行....
第5个任务在执行....
第6个任务在执行....
第7个任务在执行....
第8个任务在执行....
第9个任务在执行....

转载于:https://www.cnblogs.com/YDDMAX/p/5283732.html

各个线程顺序循环执行相关推荐

  1. 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?

    文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...

  2. jmeter 线程执行顺序_面试官让我说出8种线程顺序执行的方法!我懵了

    https://www.cnblogs.com/wenjunwei/p/10573289.html 一.前言 本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止 ...

  3. 面试官:线程顺序执行,这么多答案你都答不上来?

    前言:最近在面试过程中,发现一些面高程的朋友连怎么实现线程顺序执行都答不上来,特分享相关文章,以作科普,有收获帮忙点个在看,感谢,助中秋快乐! 一.实现 本文使用了8种方法实现在多线程中让线程按顺序运 ...

  4. main线程 子线程 顺序_面试官:线程池如何按照core、max、queue的执行顺序去执行?详解...

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  5. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)

    今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间的区别.所以花了点时间研究了下. 据msdn中介绍,它们最大的区别就是BeginInvoke属于异步执行的. Cont ...

  6. python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...

    面试官:如让线程顺序执行? 我:使用Thread的join方法. 面试官:除了join还有别的办法吗? 我:目前只用过join. 面试官:哦,那你了解CountDownLatch吗? 我:不了解,没使 ...

  7. adguard没有核心 core no_面试官:线程池如何按照core、max、queue的执行顺序去执行?...

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  8. 多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...

    前几天有一位同事在阿里一面的时候被问到这么一个多线程问题:如何保证多个线程的顺序执行.当时他没有回答上来,所以为了避免大家以后遇到同样的面试题还是回答不上来,今天我们就来分析解答下这个问题. 问题缘由 ...

  9. java三个线程 顺序执行_如何确保三个线程顺序执行

    三个线程t1.t2.t3.确保三个线程,t1执行完后t2执行,t2执行完后t3执行. 一.使用join thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. ...

最新文章

  1. get中添加header
  2. 客观地认识程序员心中的恐惧
  3. JAVA生产环境验证_Java生产环境下性能监控与调优详解
  4. zabbix3监控ESXI主机
  5. 数据库时区那些事儿 - MySQL的时区处理
  6. 马尔可夫蒙特卡罗 MCMC 原理及经典实现
  7. vue中v-html指令的使用之Vue知识点归纳(三)
  8. 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
  9. 读书笔记-简单叙述对象关系
  10. linux从前往后读取文件夹图片名称,Linux目录和文件中的常用命令(三)
  11. mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
  12. 3600000毫秒等于多少小时_一毫秒(一毫秒等于多少毫秒)
  13. 指数解读:沪深300(CSI300)[000300](续)
  14. java网络编程---使用URL爬取歌曲
  15. 在信用证支付的情况下,空运单可否作成以银行为收货人?在此种情况下可否起到约束进口方付款的作用?...
  16. LARS算法探究LOL比赛各数据对胜负的影响
  17. 从 “搞不清楚” 到 “都明白了” 的费曼
  18. php求三个数中间值
  19. 大学计算机python期末考试_大学计算机程序设计(Python)_章节测验,期末考试,慕课答案查询公众号...
  20. SSM项目-商城后台管理系统

热门文章

  1. [linux命令技巧] mkdir -p
  2. 使用ArcGIS JavaScript API 3.18 加载天地图
  3. Password Creator(HTA)
  4. 深度启动盘工具linux,Linux下无法安装深度启动盘制作工具
  5. mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)
  6. 计算机网络第4章(网络层)
  7. Linux进程间通信(管道、消息队列、共享内存、信号、信号量)
  8. range函数python-Python for循环与range函数的使用详解
  9. 操作系统以什么方式组织用户使用计算机,操作系统习题
  10. android刷新时的圆形动画_【Android】圆形揭露动画