Вы создаете новый экземпляр объекта SynchronizationDemo
в методе потока run()
.
@Override
public void run() {
new SynchronizationDemo().printTable(num);
}
Таким образом, у каждого потока есть новый объект. Таким образом, в SynchronizationDemo.class
синхронизированные блоки бесполезны, если два или более потока не имеют доступа к одному и тому же объекту. Из-за этого потоки работают разные объекты и каждый поток выводит свой номер.
Запустите ваш код 2 или более раз, вы можете увидеть другой вывод, если thread1
работает раньше, чем thread2
или нет.
Вы должны использовать ключевое слово static synchronized
с методом printTable
;
public static synchronized void printTable(int num){
//do sth.
}