-3
다음 코드를 실행하여 20000으로 계산할 것으로 예상합니다. 휘발성으로 계산했지만 예상 한 결과가 항상 올바르지 않습니다.휘발성과 동기화의 차이점
package threading;
public class Demo5 {
private volatile int count =0;
public static void main(String[] args){
Demo5 d = new Demo5();
d.doWork();
}
public void doWork(){
Thread t1 = new Thread(new Runnable() {
public void run() {
for(int i=0; i<10000; i++){
count++;
}
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
for(int i=0; i<10000; i++){
count++;
}
}
});
t1.start();
t2.start();
try{
t1.join();
t2.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(count+" is count");
}
}
나중에 동기화 된 방법으로 동기화하여 카운트를 시도하고 올바르게 작동하고 있습니다.
public synchronized void increment(){
count++;
}
누군가가 우리가 휘발성이 될 때와 동기화해야 할 때를 말해 줄 수 있습니까?
'count()'메서드는 무엇을합니까? –
그건 오타입니다. 수정 됨. –