2012-04-09 8 views
1

Я хочу сделать некоторые вычисления, но если они заняли слишком много времени (скажем, 10 секунд), я хочу остановить его и показать текущий лучший результат.остановка приложения через некоторое время

Готовый способ сделать это на Java? Я не хочу записывать проверку времени в каждой функции.

+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html Помогает ли это вообще? – MarioDS

+0

* «Я не хочу ...» * Почему нас должно волновать то, что вы хотите? Это то, что имеет значение. Можете ли вы придумать лучшую причину, чтобы обратить внимание на ваш вопрос? –

ответ

2

Использовать Timer как предлагается или пойти для нескольких потоков. В вашей основной программе запускается другой поток с расчетом. Основной поток спит через Thread.sleep и завершает расчет после таймаута.

main thread +-------+---sleeping---termination----+ 
        |     | 
another thread  +---calculation---+ 
+0

Когда вы это сделаете, расчет будет длиться десять секунд. Это очень неэффективно. –

+0

Вы правы. Если вы не позволите вычислению прервать спящий поток после завершения вычисления. – phineas

-1

Иметь другой поток с циклом, который увеличивает значение каждую секунду, а затем выходит через 10 секунд.

public class counter extends Thread, implements Runnable{ 
public void run() 
{ 
for(int index=0; index<10; index++)//Waits ten seconds 
{ 
this.sleep(1000);//ms 
} 
System.exit(0);//Closes the application 
} 

Основная тема все еще может выполняться. Чтобы отменить выключение, предположим, что вы можете иметь volatile boolean, который получает значение true, если вход был получен вовремя.

+0

Непонятно, как этот код способствует решению. Кроме того, достаточно расширить 'Thread' ** или ** реализовать' Runnable'. – phineas

1

Вы могли бы сделать отдельный поток, который вы можете начать в начале вашего расчета потока, и через 10 секунд с помощью метода Timer.sleep (INT), установить логическое значение истина. Затем в расчетной строке if(finished) break;

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