내 스레드를 중지 할 수 없습니다 ???스레드를 중지 할 수 없습니다
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();}
}
}
rp.num == 0을 사용하면 스레드를 즉시 중지 할 수 있습니다. 하지만, 왜 rp.num == x (x는 0보다 큰 숫자)를 변경하면 스레드가 멈출 수 없습니까? 이 일을 해결하도록 도와주세요 ... 도움을 주셔서 감사합니다.
같아요'runP의 RP처럼 보일 것이다 = new Threadz(). 새로운 runP();'가 스레드를 만들고 시작합니다. 그러나 다른 스레드가 실제로 실행되기 직전에 _might_가 실행되기 바로 직전에'if (rp.num == 1) {rp.stop();}'num이 여전히 0이되도록 스레드가 이미 가질 수 있습니다. 'rp.num == 1 '을 검사하는 것이 너무나 힘들고 아마도 실패 할 확률이 훨씬 더 높습니다. – Thomas
'rp.num == 1'대신'rp.num> 1 '을 사용하여 실수로 중지 조건을 건너 뛰지 않도록 스레드를 중지하십시오. – Quota
이 접근법을 실제로 유지하려면 AtomicBoolean을 사용해야합니다. 또한 ==를 두 번 치는 사이에 시간표가 필요합니다. 당신은 더 나은> – efekctive