[英]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.