我想实现这样的线程执行顺序我是安装工人1,我现在开始装底盘
sleep5000
底盘装好了,下面继续
我是安装工人2,我现在开始装轮胎
sleep5000
轮胎装好了,下面继续
我是安装工人3,我现在开始装车壳
sleep5000
车壳装好了,发现轮胎有问题,请安装工人2前来修理
我是安装工人2,我来修理轮胎
sleep5000
我是安装工人2,轮胎修理好了
这辆汽车完工了程序是这样写的public class ThreadMeTest
{ public static void main(String[] args)
{
carmen t1=new carmen("安装工人1","底盘");
carmen t2=new carmen("安装工人2","轮胎");
carmen t3=new carmen("安装工人3","车壳");
t1.start();
System.out.println("底盘装好了,下面继续");
t2.start();
System.out.println("轮胎装好了,下面继续");
t3.start();
System.out.println("车壳装好了,发现轮胎有问题,请安装工人2前来修理");
System.out.println("我是安装工人2,我来修理轮胎");
try {
t2.join();
Thread.sleep(5000);
System.out.println("我是安装工人2,轮胎修理好了");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("这辆汽车完工了");
}}class carmen extends Thread
{
String things;
public carmen(String name,String things)
{
super(name);
this.things=things;
System.out.println("我是"+getName()+","+"开始安装"+things);
} public void run()
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是"+getName()+","+things+"装好了");
}
}可运行结果是
我是安装工人1,开始安装底盘
我是安装工人2,开始安装轮胎
我是安装工人3,开始安装车壳
底盘装好了,下面继续
轮胎装好了,下面继续
车壳装好了,发现轮胎有问题,请安装工人2前来修理
我是安装工人2,我来修理轮胎
我是安装工人2,轮胎装好了
我是安装工人1,底盘装好了
我是安装工人3,车壳装好了
我是安装工人2,轮胎修理好了
这辆汽车完工了为什么会这样,哪出错了,麻烦各位了
sleep5000
底盘装好了,下面继续
我是安装工人2,我现在开始装轮胎
sleep5000
轮胎装好了,下面继续
我是安装工人3,我现在开始装车壳
sleep5000
车壳装好了,发现轮胎有问题,请安装工人2前来修理
我是安装工人2,我来修理轮胎
sleep5000
我是安装工人2,轮胎修理好了
这辆汽车完工了程序是这样写的public class ThreadMeTest
{ public static void main(String[] args)
{
carmen t1=new carmen("安装工人1","底盘");
carmen t2=new carmen("安装工人2","轮胎");
carmen t3=new carmen("安装工人3","车壳");
t1.start();
System.out.println("底盘装好了,下面继续");
t2.start();
System.out.println("轮胎装好了,下面继续");
t3.start();
System.out.println("车壳装好了,发现轮胎有问题,请安装工人2前来修理");
System.out.println("我是安装工人2,我来修理轮胎");
try {
t2.join();
Thread.sleep(5000);
System.out.println("我是安装工人2,轮胎修理好了");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("这辆汽车完工了");
}}class carmen extends Thread
{
String things;
public carmen(String name,String things)
{
super(name);
this.things=things;
System.out.println("我是"+getName()+","+"开始安装"+things);
} public void run()
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是"+getName()+","+things+"装好了");
}
}可运行结果是
我是安装工人1,开始安装底盘
我是安装工人2,开始安装轮胎
我是安装工人3,开始安装车壳
底盘装好了,下面继续
轮胎装好了,下面继续
车壳装好了,发现轮胎有问题,请安装工人2前来修理
我是安装工人2,我来修理轮胎
我是安装工人2,轮胎装好了
我是安装工人1,底盘装好了
我是安装工人3,车壳装好了
我是安装工人2,轮胎修理好了
这辆汽车完工了为什么会这样,哪出错了,麻烦各位了
解决方案 »
- 在读取二进制数据文件的记录时,为了提高效率常常使用什么辅助类?
- 哪位高手写个带缓冲效果的动画例子
- 有没有类似Slide用于版本控制的开发库?
- 回答java如何读写PowerPopit 可以增加到200分,求求大侠们帮忙了
- 开发项目时,用JAVA做框架,C++做动态库成吗?
- 如何在Linux下实现Java调用C语言编写的程序
- 如何让jbuilder生成的文件,在没有jbuilder环境的机器上运行?
- 弱弱的问:socket通讯的client和server端能实现单模式吗?
- 求问java异常处理的问题
- java如何实现对本机的ip地址 网关地址 子网掩码的修改??
- ssh集成问题
- 如何查找某字符串在整个字符串里的所有位置
public class ThreadMeTest
{ public static void main(String[] args)
{
carmen t1=new carmen("安装工人1","底盘");
carmen t2=new carmen("安装工人2","轮胎");
carmen t3=new carmen("安装工人3","车壳");
// t1.setPriority(10);
t1.start();
//System.out.println("底盘装好了,下面继续");
// t2.setPriority(6);
t2.start();
//System.out.println("轮胎装好了,下面继续");
// t3.setPriority(5);
t3.start();
System.out.println("车壳装好了,发现轮胎有问题,请安装工人2前来修理");
System.out.println("我是安装工人2,我来修理轮胎");
try {
t2.join();
Thread.sleep(5000);
System.out.println("我是安装工人2,轮胎修理好了");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("这辆汽车完工了");
}}class carmen extends Thread
{
String things;
public carmen(String name,String things)
{
super(name);
this.things=things;
System.out.println("我是"+getName()+","+"开始安装"+things);
try {
Thread.sleep(5000);
System.out.println("我是"+getName()+","+things+"装好了");
} catch (InterruptedException exception) {
exception.printStackTrace();
}
} public void run()
{
}
}
public static void main(String[] args) throws Exception {
carmen t1 = new carmen("安装工人1","底盘");
carmen t2 = new carmen("安装工人2","轮胎");
carmen t3 = new carmen("安装工人3","车壳");
t1.start();
t1.join();
System.out.println("底盘装好了,下面继续");
t2.start();
t2.join();
System.out.println("轮胎装好了,下面继续");
t3.start();
t3.join();
System.out.println("车壳装好了,发现轮胎有问题,请安装工人2前来修理");
System.out.println("我是安装工人2,我来修理轮胎");
t2.join();
Thread.sleep(5000);
System.out.println("我是安装工人2,轮胎修理好了");
System.out.println("这辆汽车完工了");
}
public class TestThreadOrder { public static void main(String[] args) {
Carmen t1 = new Carmen("安装工人1", "底盘");
Carmen t2 = new Carmen("安装工人2", "轮胎");
Carmen t3 = new Carmen("安装工人3", "车壳");
t1.start();
t2.start();
t3.start();
}
}class Carmen extends Thread {
public String things;
public Carmen cmen = null; public Carmen(String name, String things) {
super(name);
this.things = things;
} public String getThings() {
return things;
} public static synchronized void report(String name, String things,
Carmen cmen) {
System.out.println("我是" + name + "," + "开始安装" + things);
try {
Thread.sleep(5000);
} catch (InterruptedException e) { e.printStackTrace();
}
System.out.println(things + "装好了,下面继续!");
} public void run() {
report(getName(), things, cmen);
}
}
new一个car
new 3个LinkedBlockingQueue分别放1:装上底盘的car2:装上底盘后装上轮胎的car,3:装上底盘,轮胎后,装上车壳的car
3个线程
Thread1:装底盘,装好后放入LinkedBlockingQueue1
Thread2:装轮胎,先从LinkedBlockingQueue1中拿出一个car,然后装轮胎,然后放进LinkedBlockingQueue2
Thread3:装车壳,先从LinkedBlockingQueue2中取出一个car,装车壳,然后放入LinkedBlockingQueue3,这个BlockingQueue种放的就是最后的成品了
呵呵,思路给说了,LZ自己敲一下代码吧
必须等到main线程的时间片结束之后,才去执行t1,t2,t3线程,这决定于他们的线程优先级。。
楼主的第一个程序为什么没有得到想要的执行结果?
问题出在这里:t2.join()是该线程终止,直到t2线程终止之后才被唤醒。所以main线程要想打印'
'我是安装工人2,轮胎修理好了 ',必须要在t2线程执行完之后才能,被唤醒执行。
楼主修改后的程序为什么能达到你所要的效果?
因为这时,你把打印语句写在构造法方法里,在你实例化对象之后,就被调用了,也是在main线程当中去执行的所以,顺序就是按照你想要的打印。