可以终止课程吗?

时间:2010-12-07 17:55:14

标签: java

我有一个运行多个课程的程序。我希望一个类在条件为真时停止执行,并且不执行其余代码而不杀死其他类。这个类在它自己的线程上运行。这可以吗?

 class A{
    private void method{
           if(condition == true){
             //terminate class
            }
    }
}

6 个答案:

答案 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)

此处的一个选项可能是让您的对象实现GuavaService界面。它专门用于打算启动然后在某些时候关闭的服务。具体来说,您可能希望让您的课程扩展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...
}