Java多线程之多线程之间按顺序调用
Java多线程之多线程之间按顺序调用
多线程之间按顺序调用,实现A->B->C
1. 要求:
- AA打印5次,BB打印10次,CC打印15次
- 接着
- AA打印5次,BB打印10次,CC打印15次
- …来10轮
代码实现:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class ShareResource {private int number = 1; // 1: A 2:B 3:Cprivate Lock lock = new ReentrantLock();private Condition c1 = lock.newCondition();private Condition c2 = lock.newCondition();private Condition c3 = lock.newCondition();public void print5(int totalLoop) {lock.lock();try {//1.判断while (number !=1) {c1.await();}
// 2.干活for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + "\t" + i+"\t totalLoop:"+totalLoop);}
// 3,通知number =2;c2.signal();} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}public void print10(int totalLoop) {lock.lock();try {//1.判断while (number !=2) {c2.await();}
// 2.干活for (int i = 1; i <= 10; i++) {System.out.println(Thread.currentThread().getName() + "\t" + i+"\t totalLoop:"+totalLoop);}
// 3,通知number =3;c3.signal();} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}public void print15(int totalLoop) {lock.lock();try {//1.判断while (number !=3) {c3.await();}
// 2.干活for (int i = 1; i <= 15; i++) {System.out.println(Thread.currentThread().getName() + "\t" + i+"\t totalLoop:"+totalLoop);}
// 3,通知number =1;c1.signal();} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}
}public class ThreadOrderAccess {public static void main(String[] args) {ShareResource sr = new ShareResource();new Thread(() -> {for (int i = 1; i <=10 ; i++) {sr.print5(i);}},"A").start();new Thread(() -> {for (int i = 1; i <=10 ; i++) {sr.print10(i);}},"B").start();new Thread(() -> {for (int i = 1; i <=10 ; i++) {sr.print15(i);}},"C").start();}
}
多线程技巧口诀:
1. 线程 操作 资源类
2. 高内聚 低耦合
体会!
Java多线程之多线程之间按顺序调用相关推荐
- (四)Java中的多线程之间实现同步+多线程并发同步
一.什么是线程安全问题 为什么有线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作(修改变量值)时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作时不会发生数据冲突问题. ...
- JAVA并发之多线程基础(2)
除了我们经常用的synchronized关键字(结合Object的wait()和notify()使用)之外,还有对应的上篇文章讲到的方法JAVA并发之多线程基础(1)之外,我们日常中使用到最多的也就是 ...
- Java基础、多线程、JVM、集合八股文自述(持续更新)
Java基础.多线程.JVM.集合八股文自述 一.Java基础 1.1 object类有哪些方法? getClass().hashCode().equals().clone().toString(). ...
- Java中的多线程编程(超详细总结)
文章目录 Java中的多线程编程(超详细总结) 一.线程与多线程的概念 二.线程与进程之间的关系 三.一个线程的生命周期 四.多线程的目的和意义 五.线程的实现的方式 Java中的多线程编程(超详细总 ...
- Java回顾之多线程
在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信,我们把线程同步的话题留到下一篇文章中. 线程是操作系统运 ...
- Java基础之多线程详细分析
在了解多线程之前,先来了解一下进程与线程之间的关系. 进程和线程: 进程是指在系统中正在执行的一个程序,每个进程之间是独立的. 线程是进程的一个基本执行单元.一个进程要想执行任务,必须得有线程(每1个 ...
- java面试题 多线程_Java面试常见关于多线程的面试题
多线程是Java技术中常用而且相对比较难易理解的一个知识点.而且多线程也是企业实际应用中必备的技术,因此在面试的过程中,面试者经常被问到关于多线程的问题,遇到这些问题大家应该怎么办呢?赶紧恶补一下Ja ...
- Java基础之多线程框架
一.进程与线程的区别 1.定义: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比 ...
- java厨房_Java多线程基础
目录: 进程和线程 为什么使用多线程? 多线程的创建方式 Runnable与Thread两种方式比较 start()与run()方法 线程的生命周期/状态转换 常用方法使用与解读 线程的优先级 守护线 ...
最新文章
- nexus 离线下载中央库索引
- c++ empty()函数
- .net环境故障处理
- 报表-对于多数据进行 分sheet以及 分workbook处理
- POJ 1932 XYZZY (差分约束+传递闭包)
- 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];...
- JVM调优总结(5):典型配置
- rs422 波特率高错误_质量流量计的应用问题与常见错误代码的故障处理
- iOS系统预览文件但不分享的实用技巧 (iOS10, QLPreviewController)
- SQL:2016标准之新特性
- K8S搭建redis集群(2)使用redis-trib
- Ubuntu(debian) 程序 dep 打包
- 360安全助手 -- 强力卸载电脑上的软件 的问题
- Win11更改系统文件夹的默认保存位置方法分享
- 2018-04-24-c-gluttonous-snake 财务同比环比、SSH和SSM
- 《见识》----吴军博士,读书笔记
- 计算机硬件组装的图片,如何组装电脑?_百度经验
- 【高等数学】区间再现公式及其相关推论
- 编程啦1001_超级最小公倍数
- 倾听:不只是听见(倾听有哪些挑战?如何利用倾听技巧更好的理解他人)