有三个线程,a、b、c,a打印“T1”,b打印“T2”,c打印“T3”,a执行完后,b执行;b执行完后,c执行。如此循环100遍
有三个线程,a、b、c,a打印“T1”,b打印“T2”,c打印“T3”,a执行完后,b执行;b执行完后,c执行。如此循环100遍。
package com.company; /**
* 测试三个线程协同运行
*
* @Auther: xxx
* @Date: Created In 2018/1/1 22:18
* @Modified By:
*/
public class TestThread {
public static void main(String[] args) {
Thread1 t1 = new Thread1("T1");
Thread1 t2 = new Thread1("T2");
Thread1 t3 = new Thread1("T3");
t1.setNotifySignalLight(t2.getSignalLight());
t2.setNotifySignalLight(t3.getSignalLight());
t3.setNotifySignalLight(t1.getSignalLight());
t1.start();
t2.start();
t3.start();
t1.getSignalLight().notifyThis();
}
} /**
* 执行打印任务线程
*/
class Thread1 extends Thread {
//当前线程的信号灯
private SignalLight signalLight = new SignalLight();
//需要打印的消息
private String msg; /**
* 当前线程的信号灯
*
* @return
*/
public SignalLight getSignalLight() {
return signalLight;
} //当前线程需要指示其他线程的信号灯
private SignalLight notifySignalLight = null; /**
* 设置其他线程的信号灯
* @param notifySignalLight
*/
public void setNotifySignalLight(SignalLight notifySignalLight) {
this.notifySignalLight = notifySignalLight;
} /**
* 构造函数
* @param msg 打印的消息
*/
public Thread1(String msg) {
this.msg = msg;
} /**
* 线程的执行体
*/
@Override
public void run() {
for (int i = 0; i < 100; i++) {
this.signalLight.print(msg);
this.notifySignalLight.notifyThis();
}
}
} /**
* 信号灯类
*/
class SignalLight {
//是否打印消息,默认不打印,再线程外,发送消息打印
private boolean isPass = false; /**
* 打印消息
* @param msg
*/
public synchronized void print(String msg) {
//如果isPass == false,则线程等待信号,才能执行
if (!isPass) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (isPass)
System.out.println(msg);
this.isPass = false;
} /**
* 通知当前线程,可以执行
*/
public synchronized void notifyThis() {
this.isPass = true;
this.notify();
}
}
有三个线程,a、b、c,a打印“T1”,b打印“T2”,c打印“T3”,a执行完后,b执行;b执行完后,c执行。如此循环100遍的更多相关文章
- java Semaphore实现ABC三个线程循环打印
Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
简要分析: 要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中.同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来 ...
- C#编程总结(三)线程同步
C#编程总结(三)线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多 ...
- [转]C#编程总结(三)线程同步
本文转自:http://www.cnblogs.com/yank/p/3227324.html 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可 ...
- 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载
T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...
- Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理
相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...
- Java 多线程详解(三)------线程的同步
Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...
- java中使用ReentrantLock锁中的Condition实现三个线程之间通信,交替输出信息
本文直接附上源代码,如下是自己写的一个例子 面试题需求: 使用Condition来实现 三个线程 线程1 线程2 线程3 三个交替输出 [按照 线程1(main)-->线程2-->线程3] ...
- Reactor三种线程模型与Netty线程模型
文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...
随机推荐
- CodeForces - 961D:Pair Of Lines (几何,问两条直线是否可以覆盖所有点)
You are given n points on Cartesian plane. Every point is a lattice point (i. e. both of its coordin ...
- 利用python进行数据分析—数据清洗记录3,map,apply,
社会心态调查报告 导语: 时代决定心态,心态映照时代.社会心态产生于社会个体心理,又以整体的形态存在,进而影响着每个社会成员的社会价值取向和行为方式,影响着国家经济政治和社会发展大局.良好的社会心 ...
- grunt 压缩js css html 合并等配置与操作详解
module.exports = function(grunt){ //1.引入 grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTa ...
- BZOJ4066:简单题
浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...
- 第9章 DOM对象,控制HTML元素
学习地址:http://www.imooc.com/learn/10
- 机器学习:PCA(使用梯度上升法求解数据主成分 Ⅰ )
一.目标函数的梯度求解公式 PCA 降维的具体实现,转变为: 方案:梯度上升法优化效用函数,找到其最大值时对应的主成分 w : 效用函数中,向量 w 是变量: 在最终要求取降维后的数据集时,w 是参数 ...
- Java-API:java.util.ArrayList
ylbtech-Java-API:java.util.ArrayList 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. https://docs.orac ...
- catkin 工作空间
catkin 工作空间:组织和管理功能包的文件夹,以 catkin 工具编译 建立工作空间 sch01ar@ubuntu:~$ mkdir -p ~/catkin_ws/src sch01ar@ubu ...
- 重新认识synchronized(下)
synchronized既保证原子性,又保证内存可见性,是一种线程同步的方式,是锁机制的一种java实现.synchronized的实现基于JVM底层,JVM是基于monitor实现的,而monito ...
- ARRINC424—MORA(GRID)格式
每一整数经.纬度为一格,每格MORA值3位数字,表示百英尺.无法获知MORA值得网格一UNK表示. 经纬网格起始点坐标,每个网格从左下角开始计数,每经纬度一度切分一个网格.每行数据代表某一维度上往东或 ...