簡體   English   中英

如何在Java中停止第3方方法?

[英]How to stop a 3rd party method, in java?

假設我在自己的線程中運行了以下代碼:

SomeObject someObject = new SomeObject();
someObject.doLongTask();

doLongTask()方法可能需要很長時間才能完成。 我也沒有能力修改其來源。 但是我希望能夠終止正在執行的任何操作,而又不會終止我的應用程序的其余部分。 如何在運行該方法時終止該方法?

首先,我認為您應該閱讀本文: 為什么不贊成使用Thread.stop()?

由於允許其他線程隨意殺死線程會在多線程代碼中引入很多死鎖問題,這些問題很難事先考慮和緩解,因此Java開發人員決定不支持此功能。 但是,有一些方法可以解決此問題。 請看下面的代碼,了解這實際上可能不是您問題的完整解決方案,具體取決於doLongTask()的實現方式:

long timeout = ...//some number of milliseconds to wait
final SomeObject someObject = new SomeObject();
Thread t = new Thread(new Runnable(){
    @Override
    public void run(){
        someObject.doLongTask();
    }
});
t.join(timeout);
if(t.isAlive()){
    t.interrupt();
    //handle failed task here;
}

此代碼假定SomeObject.doLongTask()設計為定期查找線程中斷,並在檢測到中斷時提早終止。 否則, t將繼續運行doLongTask()直至完成。 如果未將doLongTask()編碼為處理線程中斷,並且您無權訪問源代碼,則可能會遇到運氣,因為無法在單獨的進程中運行該長任務。

暫無
暫無

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

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