各个线程顺序循环执行
问题描述: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
各个线程顺序循环执行相关推荐
- 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?
文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...
- jmeter 线程执行顺序_面试官让我说出8种线程顺序执行的方法!我懵了
https://www.cnblogs.com/wenjunwei/p/10573289.html 一.前言 本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止 ...
- 面试官:线程顺序执行,这么多答案你都答不上来?
前言:最近在面试过程中,发现一些面高程的朋友连怎么实现线程顺序执行都答不上来,特分享相关文章,以作科普,有收获帮忙点个在看,感谢,助中秋快乐! 一.实现 本文使用了8种方法实现在多线程中让线程按顺序运 ...
- main线程 子线程 顺序_面试官:线程池如何按照core、max、queue的执行顺序去执行?详解...
前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间的区别.所以花了点时间研究了下. 据msdn中介绍,它们最大的区别就是BeginInvoke属于异步执行的. Cont ...
- python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...
面试官:如让线程顺序执行? 我:使用Thread的join方法. 面试官:除了join还有别的办法吗? 我:目前只用过join. 面试官:哦,那你了解CountDownLatch吗? 我:不了解,没使 ...
- adguard没有核心 core no_面试官:线程池如何按照core、max、queue的执行顺序去执行?...
前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...
- 多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...
前几天有一位同事在阿里一面的时候被问到这么一个多线程问题:如何保证多个线程的顺序执行.当时他没有回答上来,所以为了避免大家以后遇到同样的面试题还是回答不上来,今天我们就来分析解答下这个问题. 问题缘由 ...
- java三个线程 顺序执行_如何确保三个线程顺序执行
三个线程t1.t2.t3.确保三个线程,t1执行完后t2执行,t2执行完后t3执行. 一.使用join thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. ...
最新文章
- get中添加header
- 客观地认识程序员心中的恐惧
- JAVA生产环境验证_Java生产环境下性能监控与调优详解
- zabbix3监控ESXI主机
- 数据库时区那些事儿 - MySQL的时区处理
- 马尔可夫蒙特卡罗 MCMC 原理及经典实现
- vue中v-html指令的使用之Vue知识点归纳(三)
- 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
- 读书笔记-简单叙述对象关系
- linux从前往后读取文件夹图片名称,Linux目录和文件中的常用命令(三)
- mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
- 3600000毫秒等于多少小时_一毫秒(一毫秒等于多少毫秒)
- 指数解读:沪深300(CSI300)[000300](续)
- java网络编程---使用URL爬取歌曲
- 在信用证支付的情况下,空运单可否作成以银行为收货人?在此种情况下可否起到约束进口方付款的作用?...
- LARS算法探究LOL比赛各数据对胜负的影响
- 从 “搞不清楚” 到 “都明白了” 的费曼
- php求三个数中间值
- 大学计算机python期末考试_大学计算机程序设计(Python)_章节测验,期末考试,慕课答案查询公众号...
- SSM项目-商城后台管理系统
热门文章
- [linux命令技巧] mkdir -p
- 使用ArcGIS JavaScript API 3.18 加载天地图
- Password Creator(HTA)
- 深度启动盘工具linux,Linux下无法安装深度启动盘制作工具
- mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)
- 计算机网络第4章(网络层)
- Linux进程间通信(管道、消息队列、共享内存、信号、信号量)
- range函数python-Python for循环与range函数的使用详解
- 操作系统以什么方式组织用户使用计算机,操作系统习题
- android刷新时的圆形动画_【Android】圆形揭露动画