package shiyanshi;
public class shiyanshisan
{
public static void main(String args[])
{
ThreadJoin a=new ThreadJoin();
Thread driver=new Thread(a);
Thread loader=new Thread(a);
Thread manager=new Thread(a);
driver.setName("货车司机");
loader.setName("装运工");
manager.setName("仓库管理员");
//直接传三个线程!!!!在内部类的完成联合
a.setJoinThread(driver,loader,manager);
driver.start();
}
}
package shiyanshi;
public class ThreadJoin implements Runnable
{
Thread driver,loader,manager;
public void setJoinThread(Thread t1,Thread t2,Thread t3)
{
driver=t1;
loader=t2;
manager=t3;
}
@Override
public void run()
{
if(Thread.currentThread()==driver)
{
System.out.println(Thread.currentThread().getName()+"等待"+loader.getName()+"搬运货物");
try
{
//此处联合!!!先start后join
loader.start();
//当前进程开始等待loader结束
loader.join();
}
catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"装载好了货物");
}
else if(Thread.currentThread()==loader)
{
System.out.println(Thread.currentThread().getName()+"等待"+manager.getName()+"打开仓库门");
try
{
manager.start();
//当前进程开始等待manager结束
manager.join();
}
catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"把所有的货物都装上了车");
}
else if(Thread.currentThread()==manager)
{
System.out.println(Thread.currentThread().getName()+"正在打开仓库门,请稍等...");
try
{
Thread.sleep(500);
}
catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"仓库门已打开");
}
}
}
多个线程的联合---将线程全传进去,直接在内部联合
最新推荐文章于 2023-11-05 18:53:25 发布