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

mac2025-11-12  8

请点击本文目录

模拟的问题代码ThreadJoin.javaTest.java 测试结果

模拟的问题

在主线程中再创建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(); } }

测试结果

货运司机等待搬运工搬运货物...... 搬运工等待仓库管理员打开仓库门...... 仓库管理员正在打开仓库门...... 仓库门已打开...... 搬运工已搬运完...... 货运司机准备出发......
最新回复(0)