我是初学者,我正在分析这个java代码:
// t is a thread running
while (true) {
try {
t.join();
} catch (InterruptedException e) { e.printStackTrace(); }
break;
}
t=null;
我要问的是:是否需要将其置于无限循环中?因为我看到循环只运行一次,即由于break语句。我需要一些解释。
答案 0 :(得分:3)
不,没有必要。你的观察是正确的,循环只会被执行一次。
所以OP发布的代码等同于以下代码。
// t is a thread running
try {
t.join();
} catch (InterruptedException e) { e.printStackTrace(); }
t=null;
OP发布的代码:
// t is a thread running
while (true) {
try {
t.join();
} catch (InterruptedException e) { e.printStackTrace(); }
break;
}
t=null;
答案 1 :(得分:1)
正如大家已经指出的那样,代码是不正确的。
循环,但是必要!
正确的代码如下所示:
while (true) {
try {
t.join();
break;
} catch (InterruptedException e) { e.printStackTrace(); }
}
t = null;
如果没有循环,可以将<{1}}设置为null,在当前线程成功加入之前。
答案 2 :(得分:0)
t.join();等待线程的完成。
在那之后,你的“休息”打破了循环
=&GT;总是只循环1次=&gt;不需要循环和中断,只需要t.join();
答案 3 :(得分:0)
不需要有一个while循环,因为t.join()等待线程死掉。
就像一个循环,在t.join()
行的程序中,当线程没有死时,程序将被阻止。
正确的代码是:
// t is a thread running
try {
t.join();
} catch (InterruptedException e) { e.printStackTrace(); }
t=null;
这里有一个例子:
答案 4 :(得分:0)
不需要循环! 据说线程t已经开始了。因此没有意义“t = null”。线程t已经启动,它将完成其工作。您可以在没有while循环的情况下使用t.join()。在这种情况下,while循环没有意义。 join方法允许一个线程等待另一个线程的完成。如果t是其当前正在执行其线程的Thread对象,则
t.join();
导致当前线程(下面的示例中的主线程)暂停执行,直到t的线程终止。运行以下代码片段并知道绳索。
public class Main {
public static void main(String[] args) {
Thread t=new Thread(
new Runnable() {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"--"+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t.start();
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t = null; // no sense, t is already started
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"--Thread--"+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}