这个问题在这里已经有答案了:
更好的方法来通知其他线程停止(5个答案)
如何正确停止java中的线程(9个答案)
15天前关门了。
考虑以下代码:-
class A {
Thread t = new Thread() {
@Override
public void run() {
super.run();
// Tons of statements.... (Set 1)
if(/* We don't meet certain requirements for continuing */) {
// Exit and stop the thread and do not execute any following statements after the if block
}
// Tons of statements.... (Set 2)
}
};
public void run() {
t.start();
}
}
class B {
public static void main(String[] args) {
A obj = new A();
obj.run();
}
}
我们从 main
b类。
说吧 main
在b班完成所有的指令 Thread t
仍在执行集合1中的语句。
现在,只有两种方法 t
停止。要么它到达语句集2的末尾(这将导致线程消亡),要么 if
阻止 Thread t
.
我想知道如何实现这样一个if块?
如果我只是写 join()
,然后 Thread t
似乎没有执行furthur命令,但它仍然活着,并没有消失(我从我的实验中观察到)。
以及 stop()
折旧。那么,什么是正确的方式来实施必要的政策呢 if
阻止。如果在continuti之前某些条件不满足,那么代码应该在不执行任何进一步指令(在if块下面)的情况下结束tread,然后线程立即死亡。
现在,一个简单而合适的解决方案就是把所有set2指令放进去 else
阻止,
但我想知道有没有其他合适的方法。
我正在制作一个基于文本的游戏,我创建了多个 Class A
. 对于每一个示例,我必须在多个地方进行这样的检查。
把所有的代码放进去 else
块将使代码过于嵌套。压痕看起来很糟糕,感觉这不是正确的方法。
它也会帮助我更好地理解线程。开始线程很容易,但停止线程总是对我的大脑造成沉重的损失。
2条答案
按热度按时间hrysbysz1#
线程在其
run
方法完成。这个return
语句终止方法。自方法run
不返回值,只需写入return
在if
块将终止方法,然后终止线程。h79rfbju2#
阿布拉的回答是正确的。让我补充一下关于避免
Thread
.自Java5以来,我们通常不再处理
Thread
直接上课。而是使用executor服务。通过aRunnable
或者Callable
您要执行的任务是谁的代码。在您的主要方法中:
将来,当织布机计划到来时,
ExecutorService
将AutoCloseable
. 所以我们可以在executor服务中使用try-with-resources语法。以及try
语句将被阻止,直到所有提交的任务都完成(完成或中断)。此时executor服务将自动关闭。