package demo5;
class Process extends Thread {
static int counter = 0;
public static synchronized void increment() { counter++; }
public void run() {
for (int i = 0; i < 1000000; i++)
{
increment();
}
System.out.println("Done.");
}
}
public class App {
public static void main(String[] args) throws InterruptedException {
Process p1 = new Process();
Process p2 = new Process();
p1.start();
p2.start();
p1.join();
p2.join();
System.out.println("Value of count is :" + p1.counter);
}
}
증가 기능을 NON-STATIC 함수로 선언하면 끝에있는 카운터의 값은 2 백만이되지 않습니다. 반면에 증분 방법이 정적으로 정의되면기본 멀티 스레딩 문제
이 제대로 작동합니다.
내가 아는 한 모든 프로세스 개체에 대해 하나의 증가 함수 만있을 것입니다. 그렇다면 정적 메서드로 선언해야하는 이유는 무엇입니까?
감사는 정적 synchronized
가 Process.class 인스턴스에 고정하게됩니다 선언
'카운터'가 '정적'이라고 확신 하시겠습니까? – zneak
카운터에 임시 키워드를 추가하고 동기화를 삭제해도 작동합니다. – shevchyk
@shevchik Transient는 영향을 미치지 않습니다. 휘발성을 의미합니까? 심지어 그때 그것은 작동하지 않을 것이다. –