我有一个运行多个课程的程序。我希望一个类在条件为真时停止执行,并且不执行其余代码而不杀死其他类。这个类在它自己的线程上运行。这可以吗?
class A{
private void method{
if(condition == true){
//terminate class
}
}
}
答案 0 :(得分:5)
我不完全确定你要做什么,但是如果任务在它自己的线程中运行,并且只要条件是该类的成员变量,那么当你将条件设置为false时,你应该是精细。像这样:
public class Task implements Runnable {
private boolean stop = false;
private void stop() {
this.stop = stop;
}
@Override
public void run() {
while (!stop) {
// do it
}
}
public static void main(String[] args) {
Task task1 = new Task();
new Thread(task1).start();
Task task2 = new Task();
new Thread(task2).start();
// some time later
task1.stop();
// will stop task1, but not task 2
}
}
答案 1 :(得分:4)
如果您的类在自己的线程中运行,请终止该线程。我不认为杀死一个类在Java中是可行的,无论这意味着什么。
答案 2 :(得分:3)
我强烈建议您重新考虑您的计划流程和逻辑设计。你应该“优雅地”停止而不是杀死线程。
然而,要杀死你可以做的当前线程
Thread.currentThread().stop();
stop
方法已弃用,但有充分理由。请谨慎使用。
答案 3 :(得分:1)
此处的一个选项可能是让您的对象实现Guava的Service界面。它专门用于打算启动然后在某些时候关闭的服务。具体来说,您可能希望让您的课程扩展AbstractExecutionThreadService。这将处理使服务在自己的线程上运行。然后,您需要start()
服务和stop()
服务,当您需要它停止时。您可以检查isRunning()
方法以确定它是否应该继续。
public class ClassA extends AbstractExecutionThreadService {
protected void run() {
while (isRunning()) {
...
}
}
// Can also start shutdown in another method
private void method() {
if (condition == true) {
triggerShutdown();
return;
}
}
}
所有这一切,我不太清楚你想要做什么或者你如何使用这个课程(或类),所以很难说这对你的情况如何有效。
答案 4 :(得分:0)
一个班既不能被执行,也不能被杀死或终止。 也许你在谈论方法。设置volatile布尔变量可以实现这一点。
class A{
public volatile boolean terminate_me;
private void method{
while (true)
{
if(terminate== true){
//terminate method
return;
}
}
}
}
如果有人将terminate_me设置为true,则该方法将返回。
答案 5 :(得分:0)
如果您想在某些条件为真时立即停止执行,那么您始终需要检查该条件。尽管如此,这有点乏味;
class A{
private boolean exit_me = false;
private void method{
if(!exit_me)
method1();
if(!exit_me)
method2();
if(!exit_me)
method3();
if(!exit_me)
method4();
// and so on
// will exit when all methods are executed or if exit_me is set
}
// implement method1, method2, method3, method4 etc...
}