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

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

提出问题:

 * 子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次。如此循环50次。

分析:这个实际上是非常easy的问题。即子线程run,主线程堵塞--->子线程堵塞,主线程run

可以使线程堵塞的方法有非常多,最常见的是sleep与wait。当然,须要控制的话,用wait/notify。

子线程与主线程共同操作一个Resource 对象。而Resource对象中由两个方法分别实现子线程与主线程的操作

对象

代码例如以下:

package treadgame;/** * 线程间的交流1 * 子线程循环 10 次,接着主线程循环 100 次。接着又回到子线程循环 10 次, * 接着再回到主线程又循环 100 次。如此循环50次 * @author lcx * */public class ThreadExchange1 {	public static void main(String[] args) 	{		Resource res=new Resource();		new Thread(new Sub(res)).start();		for(int i=1;i<=50;i++)		{			res.runMain();		}	}}class Resource {	boolean isSub=true;		public synchronized void runMain()	{		if(isSub)		{			try {				wait();			} catch (InterruptedException e) {				e.printStackTrace();			}		}		for(int i=1;i<=100;i++)		System.out.println("主线程循环次数   "+i);		isSub=!isSub;		notify();	}		public synchronized void runSub()	{		if(!isSub)		{			try {				wait();			} catch (InterruptedException e) {				e.printStackTrace();			}		}		for(int i=1;i<=10;i++)		System.out.println("子线程循环次数   "+i);		isSub=!isSub;		notify();	}	}class Sub implements Runnable{	Resource res;	public Sub(Resource res)	{		this.res=res;	}	public void run()	{		for(int i=1;i<=50;i++)		{			res.runSub();		}	}}

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

你可能感兴趣的文章
存储过程点滴
查看>>
[LeetCode]22.Generate Parentheses
查看>>
计算A/B Test需要的样本量
查看>>
二叉树前序中序后序遍历的非递归方法
查看>>
[Unity3d]Shader 着色器 学习前了解知识
查看>>
维辰超市:借助云商城成功转型新零售
查看>>
web.xml中<load-on-start>n</load-on-satrt>作用
查看>>
【算法】CRF
查看>>
Windows UI风格的设计(7)
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
LR录制脚本时IE打不开的原因
查看>>
Sublime Text 2.0.2,Build 2221注册码
查看>>
最长递增子序列 动态规划
查看>>
原生CSS设置网站主题色—CSS变量赋值
查看>>
webpack 4.0 中 clean-webpack-plugin 的使用
查看>>
POJ 2236 Wireless Network (并查集)
查看>>