簡體   English   中英

Java線程執行然后被多次中斷

[英]Java threads executing then being interupted multiple times

我有一個奇怪的問題,我有一個線程用於偵聽套接字上的傳入消息。 該線程是全局聲明的,但在方法listen()中實例化。 這使我可以從另一個方法stopListen()中斷它,該方法在第一次運行時效果很好,但是,當第二次調用listen()和stopListen()時,它似乎沒有被中斷。 注釋為“做一些事情”的代碼在第二次等待傳入消息后仍然執行。 下面是該代碼的簡化版本。

public class Con {
    private Thread listen;

    public void listen() {
        listen = new Thread(new Runnable() {
            @Override
            public void run() {
                while (!Thread.interrupted()) {
                    //Wait for an incoming message
                    if (!Thread.interrupted()){
                        //Do some stuff
                    }
                }
            }
        });
        listen.start();
    }

    public void stopListen() {
        listen.interrupt();
    }
}

我知道有一個變量和一個叫做同一件事的方法有點奇怪。 這應該可行嗎,還是我不能多次使用全局變量來中斷線程?

謝謝。

我看到的主要問題是, interrupted()會重置中斷標志(請參閱鏈接的文檔),這意味着下一次對interrupted()調用將返回false,除非再次被中斷。 而是使用isInterrupted()不會清除標志!

另外,正如chr所說,如果您啟動多個線程(多次調用listen() ),您將只能中斷最新的線程。 在這種情況下,請創建一個線程List並將其全部中斷(或僅中斷List中的第一個線程,然后將其從列表中刪除,或使用任何所需的功能)。

暫無
暫無

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

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