c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...
建立三个线程,线程名字分别为:A、B、C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印。打印10轮,打印完毕控制台输出字符串:"打印完毕"
方法之一:使用Condition等待唤醒机制,代码如下:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* Created by gan on 2019/5/19 10:54.
*/
public class ConditionDemo {
private static int num = 1; //打印“谁”标识符
private static Lock lock = new ReentrantLock();
private static final Condition conditionA = lock.newCondition();
private static final Condition conditionB = lock.newCondition();
private static final Condition conditionC = lock.newCondition();
private static CountDownLatch countDownLatch = new CountDownLatch(10); //使用闭锁计数器
public static void main(String[] args) throws Exception {
long loop = countDownLatch.getCount(); //初始化打印轮数
new Thread(() -> {
for (int i = 1; i <= loop; i++) {
try {
printA();
} catch (InterruptedException e) {
}
}
}, "A").start();
new Thread(() -> {
for (int i = 1; i <= loop; i++) {
try {
printB();
} catch (InterruptedException e) {
}
}
}, "B").start();
new Thread(() -> {
for (int i = 1; i <= loop; i++) {
try {
printC(i);
} catch (InterruptedException e) {
}
}
}, "C").start();
countDownLatch.await();
System.out.println("打印完毕.........");
}
//打印‘A’的方法
public static void printA() throws InterruptedException {
lock.lock();
if (num != 1) { //标识符等于1的时候打印A
conditionA.await();
}
System.out.print(Thread.currentThread().getName());
num = 2;
conditionB.signal();
lock.unlock();
}
//打印‘B’的方法
public static void printB() throws InterruptedException {
lock.lock();
if (num != 2) { //标识符等于2的时候打印B
conditionB.await();
}
System.out.print(Thread.currentThread().getName());
num = 3;
conditionC.signal();
lock.unlock();
}
//打印‘C’的方法
public static void printC(int loop) throws InterruptedException {
lock.lock();
if (num != 3) { //标识符等于3的时候打印A
conditionC.await();
}
System.out.print(Thread.currentThread().getName());
System.out.print("[" + loop + "]"); //轮数间隔符号
num = 1;
conditionA.signal();
countDownLatch.countDown();
lock.unlock();
}
}
运行结果如下:
用三个线程按顺序循环打印ABC三个字母
有两种方法:semaphore信号量和mutex互斥锁.需要注意的是C++11已经没有semaphore. C++ 并发编程(六):信号量(Semaphore) - 止于至善 - SegmentFau ...
多个线程分别顺序交替打印一种不同字符abcdefg(已实现随便多少个线程打印多少个字符,利用线程池实现多线程)
下面实现多线程顺序打印字符"abcdefg": 实现Runnable接口: /** * @author: rhyme * @date: 2019-08-17 14:39 * @to ...
三个线程ABC,交替打印ABC
转载与:https://www.cnblogs.com/x_wukong/p/4009709.html 创建3个线程,让其交替打印ABC . 输出如下: ABCABCABCABC. 方法:使用syn ...
斐讯面试记录—三线程交替打印ABC
package cn.shenzhen.feixun; public class PrintABC extends Thread{ private String name; private Objec ...
【Java多线程系列四】控制线程执行顺序
假设有线程1/线程2/线程3,线程3必须在线程1/线程2执行完成之后开始执行,有两种方式可实现 Thread类的join方法:使宿主线程阻塞指定时间或者直到寄生线程执行完毕 CountDownLatc ...
python多线程交替打印abc以及线程池进程池的相关概念
import threading import sys import time def showa(): while True: lockc.acquire() #获取对方的锁,释放自己的锁 prin ...
一道有意思的多线程面试题 C# 代码实现
如果你对多线程的控制不怎么了解,那么理解了这篇文章的内容也许对你有帮助.鼓励先自己动手实现一遍,做不出来在看代码. 题目一:两个线程交替打印0~100的奇偶数 这道题就是说有两个线程,一个名为偶数线程 ...
随机推荐
c++ static及const(开发者在线)
static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因.作用谈起,全面分析static 修饰符的实质. static 的两大作用: 一. ...
Nginx简单配置
Nginx 配置文件结构如果你下载好啦,你的安装文件,不妨打开 conf 文件夹的 nginx.conf 文件,Nginx 服务器的基础配置,默认的配置也存放在此.在 nginx.conf 的注释符号 ...
poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
每日一“酷”之string
介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...
Android EditText圆角的方法
一.在drawable下面添加xml文件rounded_editview.xml <?xml version="1.0" encoding="utf-8" ...
PLSQL学习教程(全)
基于ORACLE9i+PL/SQLDeveloper7.1.4) 课程 一 PL/SQL 基本查询与排序 本课重点: 1.写SELECT语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ...
HTML5 移动端的上下左右滑动问题
在移动端页面上,如果要实现[顶部轮播,手指触摸左右滑动]我的方案是,通过监听滑动,阻止默认事件来完成 div.addEventListener('touchmove',function(event){ ...
【vim】查找重复的连续的单词
当你很快地打字时,很有可能会连续输入同一个单词两次,就像 this this.这种错误可能骗过任何一个人,即使是你自己重新阅读一遍也不可避免.幸运的是,有一个简单的正则表达式可以用来预防这个错误.使用 ...
[C++]QString方法集
QString s = "hello world"; s. indexOf ( "o" )); //4 s. lastIndexOf ( "o&qu ...
Leetcode 5016. 删除最外层的括号
5016. 删除最外层的括号 显示英文描述 我的提交返回竞赛 用户通过次数446 用户尝试次数469 通过次数456 提交次数577 题目难度Easy 有效括号字符串为空 ("&quo ...
c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...相关推荐
- thread.sleep是让哪个线程休眠_java多线程必看:java线程的生命周期
点击蓝字 关注我们 线程是一个动态执行的过程,它也有从创建到死亡的过程.线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待. ...
- java 多线程使用线程池_Java多线程:如何开始使用线程
java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...
- linux c进程线程的面试问题,linux 多线程面试题_linux进程线程_linux 线程 pthread_create...
你写了一个简单的mandelbrot set程序,也就是说用ps命令行是可以看见多个线程,win32里同一个进程里各个线程之间是共享数据段的,win32的进程管理方式与unix上有着很大区别.adob ...
- call线程起名字_多线程面试题总结
1.什么是线程,什么是进程,它们有什么区别和联系,一个进程里面是否必须有个线程 进程本质是一个正在执行的程序,一个进程可以有多个线程.线程是进程的最小执行单位,一个进程至少有一个线程 区别:1:多进程 ...
- parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池
线程组 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织. 构造函数 ThreadGroup(String name)//默认parent为当前线程组 ThreadGro ...
- go和java线程,Go的多线程和pthread或Java线程有什么区别?
正如之前的答案所述,go例程并不一定与系统线程相对应,但是如果你现在必须提高多线程的性能,我发现以下内容很有用: The current implementation of the Go runtim ...
- Java多线程面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次
近在学习多线程,特贴在这里,并附上自己所作答案(参考与张孝祥老师的方法). 题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50 ...
- java线程 stop()_java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())...
JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...
- linux生产者进程数为3个,linux 多线程面试题_linux 进程线程_linux 线程 进程(3)
//生产者线程函数 unsignedint__stdcallProducerThreadFun(PVOIDpM) { for(inti=1;i<=END_PRODUCE_NUMBER;i++) ...
- c语言多线程面试题,iOS面试题--网络多线程
一.多线程的底层实现? 1>线程:Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程 2>开发中很少用Mach级的线程,因为Mach级的线程没有提供多 ...
最新文章
- 在医疗领域你知道哪些人工智能黑科技?
- 免安装版 mysql-5.6.29-winx64 下载,配置
- Java 二维数组的初始化
- vb+socket 编写入侵监听程序
- CVPR 2019 | 基于可解释性以及细粒度的可视化解释卷积神经网络
- Spring字段注入
- 算法分析-动态规划-01背包
- 素数筛(快速筛)-爱拉托斯特尼筛法+欧拉筛
- MVpArms集成框架快速开发
- 当 TiDB 遇到图数据库 | TiDB Hackathon 2020 优秀项目分享
- Windows 10 驱动开发 及 驱动签名
- java中display中的属性_全面解析display属性
- policy服务器未能登录,win7电脑提示group policy client服务未能登录的解决方法
- Java打印101-150之间所有的质数
- form提交的几种方法
- GeoHash算法与用法
- bzoj4668: 冷战
- 英文软件测试文章翻译,软件测试中英文对照外文翻译文献
- The Cook and the Chef: Musk’s Secret Sauce
- 云端的精彩:让信息在指尖流动