синхронизированный блок для объекта Integer
Я только что наткнулся на синхронизированный блок в Java и написал небольшую программу, чтобы проверить, как она работает.
Я создаю 10 потоков и позволяю каждому потоку увеличивать объект Integer в 1000 раз.
Так что с синхронизацией я бы предположил результат 10000 после того, как все потоки закончили свою работу, и результат менее 10000 без синхронизации.
Однако синхронизация не работает, как я ожидал.
Я предполагаю, что это как-то связано с неизменностью объекта или около того.
Моя программа:
public class SyncTest extends Thread{
private static Integer syncObj = new Integer(0);
private static SyncTest[] threads = new SyncTest[10];
private boolean done = false;
public void run(){
for(int i = 0; i < 1000; i++){
synchronized(syncObj){
syncObj ++;
}
}
done = true;
}
public static void main(String[] args) {
for(int i=0; i < threads.length; i++){
threads[i] = new SyncTest();
threads[i].start();
}
while(!allDone()); //wait until all threads finished
System.out.println(syncObj);
}
private static boolean allDone(){
boolean done = true;
for(int i = 0; i < threads.length; i++){
done &= threads[i].done;
}
return done;
}
}
Может кто-нибудь уточнить это?