我有一个运行多个类的程序。我想让一个类在条件为真时停止执行,而不是在不杀死其他类的情况下执行其余的代码。这个类运行在它自己的线程上。这是可行的吗?可能终止课程?
class A{
private void method{
if(condition == true){
//terminate class
}
}
}
我有一个运行多个类的程序。我想让一个类在条件为真时停止执行,而不是在不杀死其他类的情况下执行其余的代码。这个类运行在它自己的线程上。这是可行的吗?可能终止课程?
class A{
private void method{
if(condition == true){
//terminate class
}
}
}
如果您的类在自己的线程中运行,请杀死该线程。我不认为杀死一个类在Java中是可行的,无论这意味着什么。
我想问题是,如何只杀死当前线程。 – aioobe 2010-12-07 18:01:47
一个类既不能被执行也不能被终止。 也许你正在谈论方法。设置一个易变的布尔变量可能会完成。
class A{
public volatile boolean terminate_me;
private void method{
while (true)
{
if(terminate== true){
//terminate method
return;
}
}
}
}
如果有人将terminate_me设置为true,则方法将返回。
我不完全确定你想要做什么,但是如果任务运行在它自己的线程中,并且只要condition是该类的成员变量,那么当你设置条件为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
}
}
我强烈建议您重新考虑您的程序流程和逻辑设计。你应该停止“优雅”而不是杀死线程。
然而,杀死当前线程,你可以做
Thread.currentThread().stop();
的stop
方法已经废弃了一个很好的理由,但。谨慎使用。
这里的一个选项可能是让您的对象实现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;
}
}
}
所有这一切说,我不是你想做的事,或者你如何实际使用这个类(或类)到底是什么太清楚,所以很难说这将如何为你的情况下工作。
如果您想在一些条件为真时立即停止执行,那么您总是需要检查该条件。尽管这样做有点乏味。
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...
}
`不杀死对方classes`请解释更 – 2010-12-07 17:57:18
对于迂腐的缘故,类没有在这种情况下一个生命周期;对象可以,对,可以杀死对象(实际上你必须把它留给GC)或者使用对象的线程来阻止代码的进一步执行。 – 2010-12-07 18:05:02