Java多线程之线程联合,在主线程中再创建3个线程:“运货司机”、“装运工”和“仓库管理员”。

模拟的问题

在主线程中再创建3个线程:“运货司机”、“装运工”和“仓库管理员”。要求线程“运货司机”占有CPU资源后立刻联合线程“装运工”,也就是让“运货司机”一直等到“装运工”完成工作才能开车,而“装运工”占有CPU资源后立刻联合线程“仓库管理员”,也就是让“装运工”一直等到“仓库管理员"打开仓库才能开始搬运货物。

代码

ThreadJoin.java

package thread;

public class ThreadJoin implements Runnable{
	Thread joinThreadMover;
	Thread joinThreadManager;
	public void setJoinThreadMover(Thread t){
		joinThreadMover = t;
	}
	public void setJoinThreadManger(Thread t){
		joinThreadManager = t;
	}
	@Override
	public void run() {
		if(Thread.currentThread().getName().equals("货运司机")){
			try{
				System.out.println("货运司机等待搬运工搬运货物......");
				Thread.sleep(2000);
				joinThreadMover.start();
				joinThreadMover.join();
				Thread.sleep(2000);
				System.out.println("货运司机准备出发......");
			}
			catch(InterruptedException e){
				System.out.println(e);
			}
		}
		else if(Thread.currentThread().getName().equals("搬运工")){
			try{
				System.out.println("搬运工等待仓库管理员打开仓库门......");
				Thread.sleep(2000);
				joinThreadManager.start();
				joinThreadManager.join();
				Thread.sleep(2000);
				System.out.println("搬运工已搬运完......");
			}
			catch(InterruptedException e){
				System.out.println(e);
			}
		}
//		else if(Thread.currentThread() == joinThreadManager)
		else if(Thread.currentThread().getName().equals("仓库管理员")){
			try{
				System.out.println("仓库管理员正在打开仓库门......");
				Thread.sleep(2000);
				System.out.println("仓库门已打开......");
			}
			catch(InterruptedException e){
				System.out.println(e);
			}
		}
	}
}

Test.java

package thread;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadJoin a = new ThreadJoin();
		Thread driver = new Thread(a);
		Thread mover = new Thread(a);
		Thread manager = new Thread(a);
		driver.setName("货运司机");
		mover.setName("搬运工");
		manager.setName("仓库管理员");
		a.setJoinThreadMover(mover);
		a.setJoinThreadManger(manager);
		driver.start();		
	}

}

测试结果

货运司机等待搬运工搬运货物......
搬运工等待仓库管理员打开仓库门......
仓库管理员正在打开仓库门......
仓库门已打开......
搬运工已搬运完......
货运司机准备出发......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值