多线程联接不工作(JAVA线程)
Join不起作用。我得到了一个错误的输出。代码如下:
package Test;
public class Test {
public static void main(String[] args){
System.out.println("Hello world!");
ThreadTest t1 = new ThreadTest("1");
ThreadTest t2 = new ThreadTest("2");
t1.start();
try{
t1.join();
System.out.println("OK!");
}catch( Exception e){
e.getMessage();
System.out.println("Fail!");
}
t2.start();
}
}
package Test;
public class ThreadTest extends Thread{
private Thread t;
private String name;
ThreadTest (String name){
this.name = name;
}
public void run(){
for(int i = 0; i<=10; i++){
System.out.println("Tread: " + name + " " + i);
}
}
public void start(){
if(t == null){
t = new Thread(this, name);
t.start();
}
}
}
我得到以下输出:
你好,世界
好的
胎面花纹:10
胎面花纹:11
胎面花纹:12
胎面花纹:13
胎面花纹:14
胎面花纹:20
胎面花纹:21
胎面花纹:22
胎面花纹:15
胎面花纹:23
胎面花纹:16
胎面花纹:24
胎面花纹:17
胎面花纹:25
胎面花纹:18
胎面花纹:26
胎面花纹:19
胎面花纹:27
胎面花纹:110
胎面花纹:28
胎面花纹:29
胎面花纹:210
这是错误的!由于join()方法,线程2应该在线程1完成后启动,而不是在两者之间
# 1 楼答案
其他答案告诉您的是,您的程序创建了四个线程实例,但它只使用其中两个作为线程。您加入的线程实例是程序从未启动的两个线程实例之一
部分混淆是由于线程子类有一个名为
start()
的方法,但该方法并不像Thread.start()
那样做好吧,这很糟糕,但还有一个更深层次的问题:
问:这样做有什么意义:
答:这样做毫无意义。使用线程的意义在于,当一个线程启动另一个线程时,第一个线程可以在新线程运行时执行其他操作:
# 2 楼答案
您正在使用此方法创建一个新线程
应该是这样的
# 3 楼答案
您不是在线程上连接,而是在对象ThreadTest上连接
方法start是创建一个新线程并启动它
我建议在
ThreadTest
中添加一个类似这样的方法并调用它:# 4 楼答案