2014-10-22 5 views
2

У меня есть поток, который выполняет несколько разных задач. Каждая задача зависит от того, какой из предыдущих был успешным.Перерыв или выход Java из потока

Если бы это был метод, который я мог бы написать (длинная рука):

public boolean outerMethod() 
{ 
    boolean success= performTask(); 

    if(success == false) 
    { 
     return false; 
    } 

    // more processing here if success == true 
} 

и выйти из outerMethod обратно вызывающему, и дальнейшая обработка не происходит

Но ...

Если я нахожусь в run() методе нити, и я что-то сделать, как показано ниже ...

Как я могу закончить текущий поток тут же?

public void run() 
{ 
    boolean success = performTask(); 

    if(success == false) 
    { 
     /* here is where I want to exit this thread */ 
    } 

    // further processing if success == true 
} 
+0

thread stop() амортизируется. Вместо использования вместо –

ответ

3

вы можете просто позвонить return без значения для выхода из метода void ранее.

public void run() { 
    boolean success = performTask(); 

    if(success == false){ 
     return; //ends the thread 
    } 
    // further processing if success == true 
} 
3

Выполнение резьбы завершается, когда выполнение метода run() делается, так что вы можете вернуться обычно от этого метода, так же, как вы могли бы сделать в вашем outerMethod() (хотя вы просто return;, так как есть нет возвращаемого значения).

2

нить остановка() амортизируется .use целевой instead.thread будет выходить, когда никакие дальнейшие работы не осталось

public void run() 
{ 
    boolean success = performTask(); 

    if(success) 
    { 
     // further processing if success == true 
    } 

    //thread will exit here 
} 

и побочное замечание

использование

if(success) instead of if(success==true) and use if(!success) instead of if(success!=true) 
+2

Это лучший подход. Он применяет принцип «возврат один раз». Код, как правило, легче понять и прочитать, если вы вернетесь (или выходите в случае пустоты) один раз в самом конце метода. С возвращением и перерывами в коде сложнее читать. – Freiheit

+0

Да, я обычно использую if (success), как вы уже упоминали. Я просто использовал длинный рукав в своем вопросе для ясности. Я дал вам голос, хотя :) – thonnor

Смежные вопросы