синхронизированный блок для объекта 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;
    }
}

Может кто-нибудь уточнить это?

Ответы на вопрос(3)

Ваш ответ на вопрос