Прошел лекцию о volatile, из нее понял что без synchronized блока нити могут неправильно изменять переменную, а только правильно читать ее. Вопрос: как с использованием synchronized правильно реализовать код, в котором каждая нить будет инкрементировать общую для всех нитей переменную на 1. Написал код (ниже), но каждый раз разные результаты, как добиться результат count = 200 после завершения работы 200 нитей.
public class VolatileTest {
    public static Integer count = 0;

    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 200; i++) {
            Thread thread1 = new Thread(new Jumps());
            thread1.start();
        }

        Thread.sleep(200);
        System.out.println(count);
    }

}

class Jumps implements Runnable {
    @Override
    public void run() {
        this.countIncrement();
    }

    public synchronized void countIncrement() {
        VolatileTest.count++;
    }
}