博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程经典问题2——子线程之间交替问题
阅读量:7021 次
发布时间:2019-06-28

本文共 1199 字,大约阅读时间需要 3 分钟。

编写一个程序。开启3个线程,这3个线程的ID分别为ABC,每一个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC.依次递推。

这个问题仍旧是线程间的交替控制问题,分析方法还是能够同上一篇“”。

详细代码例如以下:

package treadgame;/** * 线程间的交流1 * 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C, * 每一个线程将自己的ID在屏幕上打印10遍, * 要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。 * @author lcx * */public class ThreadExchange2 {	public static void main(String[] args) 	{		Resource2 res=new Resource2();		Thread td1=new Thread(new Subs('A',res));		Thread td2=new Thread(new Subs('B',res));		Thread td3=new Thread(new Subs('C',res));		td1.start();		td2.start();		td3.start();	}}class Resource2 {	int index=0;	public synchronized void runSub(char tag)	{		for(int i=0;i<10;i++)		{			while(tag-'A'!=index)			{				try {					wait();				} catch (InterruptedException e) {					e.printStackTrace();				}			}			System.out.print(tag);			index=(index+1)%3;			notifyAll();		}	}}class Subs implements Runnable{	char tag;	Resource2 res;	public Subs(char tag,Resource2 res)	{		this.tag=tag;		this.res=res;	}	public void run() {		res.runSub(tag);	}}

必需要注意的是

while(tag-'A'!=index)
不能写成
if(tag-'A'!=index)
否则会出现错误,由于notifyAll会唤醒剩下的两个线程。当中仅仅能有一个是正确的、需要运行的线程
 
 
追问:之前说的子线程与主线程交替运行,为什么就能够在使用if来推断是否wait?
由于假设本线程不是须要运行的线程。那么另外一个线程绝对是须要运行的线程,所以一个if即可。

转载地址:http://ylbxl.baihongyu.com/

你可能感兴趣的文章
各种排序算法
查看>>
条码控件商IDAutomation极大改善了Barcode Image Generator性能
查看>>
AxureRP7.0基础教程系列 部件详解 Menu 菜单
查看>>
SpringMVC 搭建及详解
查看>>
PCC-S-02201
查看>>
solr的分词器
查看>>
源码包安装
查看>>
docker hello-world
查看>>
5个词 带你回忆2014 IT安全圈
查看>>
微信小程序从入门到项目实战
查看>>
CentOS7 安装执行 VmwareCore
查看>>
EL表达式详解
查看>>
docker容器
查看>>
系统性能指标查看方法-Linux
查看>>
Android应用退出的认识
查看>>
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
查看>>
AirTight C-60 AP
查看>>
我的友情链接
查看>>
Android实现退出时提示再按一次退出
查看>>
成功路上并不拥挤
查看>>