Tôi cố gắng để chấm dứt các chủ đề trong đoạn mã sau:ngắt() không hoạt động
public synchronized void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
this.scan();
this.distribute();
this.wait();
}
} catch (InterruptedException e) {}
}
public void cancel() {
this.interrupt();
}
Nhưng thread sẽ không chấm dứt. Tôi đã sử dụng trình gỡ rối và phát hiện ra rằng sau lệnh this.interrupt()
, luồng không bị gián đoạn (tôi đặt một chiếc đồng hồ trên biểu thức this.isInterrupted()
và nó vẫn là false
). Bất cứ ai cũng có một ý tưởng tại sao thread này sẽ không bị gián đoạn?
Chỉnh sửa:
Đã xảy ra sự cố. Hóa ra rằng có hai trường hợp của chủ đề này. Tôi gắn mã có vấn đề dẫn đến điều này:
/* (class Detector extends Thread) */
Detector detector = new Detector(board);
...
Thread tdetector = new Thread(detector); /* WRONG!!! */
...
tdetector.start();
...
nếu bạn thử bằng '! Thread.interrupted()' trong điều kiện –
Không có tĩnh trong lớp 'Thread' theo tên đó. Và nó sẽ không có ý nghĩa, bởi vì đây là một phương pháp có liên quan đến một thể hiện của lớp này. –
Chắc chắn có một phương thức tĩnh ['Thread.interrupted()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#interrupted%28%29). Tôi không nghĩ rằng nó sẽ giúp, mặc dù, bởi vì về cơ bản nó làm điều tương tự như phương pháp cá thể (nhưng cũng xóa cờ bị gián đoạn, mà có thể làm phức tạp mọi thứ). –