tại sao luồng của tôi không thể dừng lại ???Chủ đề không thể dừng lại
class Threadz {
class runP implements Runnable {
int num;
private volatile boolean exit = false;
Thread t;
public runP() {
t = new Thread(this, "T1");
t.start();
}
@Override
public void run() {
while(!exit) {
System.out.println(t.currentThread().getName()+": "+num);
num++;
try {
t.sleep(200);
} catch(InterruptedException e) {}
}
}
public void stop() {
exit = true;
}
}
public static void main(String[] a) {
runP rp = new Threadz().new runP();
if(rp.num == 1) {rp.stop();}
}
}
nếu tôi sử dụng rp.num == 0, thread có thể được dừng lại ngay lập tức. Nhưng, tại sao khi tôi thay đổi rp.num == x (x là bất kỳ số nào lớn hơn 0) thì luồng không thể dừng lại? hãy giúp tôi giải quyết vấn đề này ... cảm ơn vì đã giúp.
Tôi đoán 'runP rp = new Threadz(). new runP(); 'đang tạo và bắt đầu luồng. Tuy nhiên, 'if (rp.num == 1) {rp.stop();}' ngay sau đó _might_ được thực hiện ngay trước khi luồng khác thực sự bắt đầu chạy vì vậy 'num' vẫn là 0. Ngoài ra, luồng có thể đã có chạy nhiều lần do đó việc kiểm tra 'rp.num == 1' là _very_ mong manh và có thể thường xuyên thất bại hơn là không. – Thomas
Hãy xem xét sử dụng 'rp.num> 1' thay vì' rp.num == 1 'để dừng chuỗi của bạn để đảm bảo bạn không vô tình bỏ qua điều kiện dừng của bạn. – Quota
Bạn cần sử dụng AtomicBoolean để thực sự giữ nguyên phương pháp này. Ngoài ra, bạn cần có thời gian hoàn hảo giữa cả hai luồng để nhấn ==. Bạn tốt hơn off với> – efekctive