簡體   English   中英

在給定時間后停止Java中的線程-不起作用

[英]stop a thread in java after a given time - doesn't work

我有一個復雜的功能(優化),它有可能進入循環或僅花費過多時間,並且允許的時間由用戶設置。

因此,我試圖使函數在單獨的線程中運行,並在經過最大時間后停止運行。 我使用與下面的代碼類似的代碼,但是它不起作用,因此

int timeMax = 2; //time in minutes  
Thread Thread_Object = new Thread_Class(... args...);
try {
  Thread_Object.start();
  Thread_Object.join(timeMax*60*1000);
}

我認為我沒有正確使用函數“ join”,或者它沒有執行我所了解的。 任何想法?

謝謝!


感謝您的回答,目前我在這里找到了一個更好的主意*。 它可以工作,但仍使用不建議使用的“停止”功能。 新的代碼是:

Thread Thread_Object = new Thread_Class(... args...);

try {
  int timeMax = 1;
  Thread_Object.start();
  Thread.currentThread().sleep( timeMax * 1000 );

    if ( Thread_Object.isAlive() ) {
        Thread_Object.stop();
        Thread_Object.join();
    }

}
catch (InterruptedException e) {

}

還不確定“ join”的功能,我得去看一本書。

join方法將等待當前線程,直到完成連接的線程為止。 以毫秒為單位的連接作為參數傳入將等待一段時間,如果時間已到,則通知等待線程並返回。

您可以做的是,在聯接完成后中斷您聯接的線程。 當然,這需要您的線程對線程中斷做出響應。

我建議您使用計時器

Thread.join(milis)不會殺死線程。 它只是等待線程結束。

Java線程是協作的:沒有線程就無法停止或優雅地殺死線程。 一種方法是讓原子標志(布爾字段)被線程檢查並退出(如果已設置)。

Java中的看門狗定時器並不是一件容易的事,因為線程是協作的。 我記得在一個項目中,雖然不推薦使用Thread.stop(),但沒有優雅的解決方案。 但是,使用它我們沒有遇到任何問題。

Java看門狗實現的一個很好的例子:

http://everything2.com/user/Pyrogenic/writeups/Watchdog+timer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM