我有一個運行多個類的程序。我想讓一個類在條件爲真時停止執行,而不是在不殺死其他類的情況下執行其餘的代碼。這個類運行在它自己的線程上。這是可行的嗎?可能終止課程?
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