Что не так с кодом, мои потоки не синхронизируются: У меня в приведенном ниже примере синхронизированный метод печати, который будет вызывать поток, но все же вывод показывает, что потоки не синхронизируются при доступе к методу печати. См. Вывод ниже.что случилось с синхронизированным
Главный класс
public class ExecutorTester {
public static void main(String[] args) {
PrinterRunnable pr = new PrinterRunnable();
ExecutorService excutor = Executors.newFixedThreadPool(20);
//ExecutorService excutor = Executors.newSingleThreadExecutor();
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.submit(pr);
excutor.shutdown();
for(int i =0; i<5;i++)
System.out.println("In Main Thread : "+i);
}
}
Класс Thread
public class PrinterRunnable implements Runnable {
@Override
public void run() {
for(int i =0; i<5;i++){
//System.out.println("In Thread class" +i);
Printer p = new Printer();
p.print(i);
}
}
}
другой класс
public class Printer {
public synchronized void print(int i){
System.out.println("Entered Thread: "+Thread.currentThread().getId());
System.out.println("In thread: "+Thread.currentThread().getId()+"count::"+i);
System.out.println("Exit Thread: "+Thread.currentThread().getId());
}
}
Console Output (см ниже резьбы 13 и 11 оба вошли !!!)
Entered Thread: 13
Entered Thread: 11
In thread: 11count::0
Exit Thread: 11
Entered Thread: 11
In thread: 11count::1
Exit Thread: 11
In thread: 13count::0
Exit Thread: 13
Entered Thread: 13
In thread: 13count::1
Exit Thread: 13
........
........
........
синхронизированный только блокирует объект, а не метод и все объекты. Если вы даете каждому потоку собственный объект, это не будет иметь никакого эффекта. –