多线程学习-----线程同步(四)

本文详细介绍了一种利用同步方法和wait/notify机制实现主线程与子线程间精确交互的策略。通过一个具体示例,展示了如何在Java中创建一个主线程与子线程交替执行的场景,确保了线程之间的正确同步和资源的有效共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个线程要执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象,锁是上在代表要操作的资源类的内部方法中的,而不是在线程代码中,

问题:子线程循环10次,回到主线程执行100次,接着又回到子线程执行10次,再回到主线程执行100次,如此循环50次,该如何实现?

public class ThreadCommunicationStudy {
	
	
	public static void main(String[] args) {
		//线程代码
		Bussiness b = new Bussiness();
		new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i = 1;i<=50;i++){
					b.subThreadCreate(i);
				}
			}
		}).start();
		
		for(int i = 1;i<=50;i++){
			b.mainThreadCreate(i);
		}
		
	}
	
}
//资源类
class Bussiness{
	//指示是否该子线程执行的布尔临时变量
	private boolean isSub = true;
	
	//子线程资源方法
	public synchronized void subThreadCreate(int i){
		//如果不该子线程执行,子线程等待
		while(!isSub){
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		for(int j = 1;j<=10;j++){
			System.out.println("sub thread number of "+j+" loop of "+i);
		}
		//子线程执行完,让指示是否该子线程执行为false
		isSub = false;
		//唤醒等待的主进程
		this.notify();
	}
	//主线程资源方法
	public synchronized void mainThreadCreate(int i){
		//如果该子进程去执行,让主进程等待
		while(isSub){
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		for(int j = 1;j<=100;j++){
			System.out.println("MAIN thread number of "+j+" loop of "+i);
		}
		//主进程执行完,轮到子进程去执行,令isSub为true
		isSub = true;
		//唤醒等待的子进程
		this.notify();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值