3
누군가가 설명합니다. 왜 synchronized block
변수를 잠글 수 있습니까? _c
여기에?동기화 된 블록이 개체를 잠그지 않습니다
public class static_thread implements Runnable{
private static Integer _c=0;
public static void main(String[] args) throws Throwable {
for(int i=0;i<100000;i++){
if(i%2==0){_c++;}
}
System.out.println("one thread: "+_c);
Thread[] t=new Thread[50];
_c=0;
for(int i=0;i<t.length;i++){
t[i]=new Thread(new static_thread(i, i*(100000/50)));
t[i].start();
}
for(Thread _:t){_.join();}
System.out.println("+one thread: "+_c);//wrong answer!
}
public void run() {
for(int i=s;i<(s+l);i++){
if(i%2==0){
synchronized (_c) {//y u no lock?!
_c++;//Inconsistence, not thread-safe, so what is synchronized block is doing here?
}
}
}
}
int s,l;
public static_thread(int s, int l) {
this.s = s;
this.l = l;
}
}
각 실행마다 새로운 잘못된 값을 얻습니다. 이
_c++
이렇게함으로써
많은 분들께 감사드립니다. 당신의 도움을 주셔서 감사합니다. –