Java имеет два способа реализовать синхронизация. Мой код дает правильный ответ, когда я использую синхронизированное ключевое слово после метода, но дает мне неправильный вывод, когда я использую синхронизированный блок. Вот код, который дает мне неправильный вывод. Я использовал eclipse IDE для компиляции и запуска этого кода.Синхронизация потоков Java
package synchronizedPackage;
public class Synch1 {
public class callMe {
void call(String msg)
{
System.out.print("[ "+msg);
try{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println("]");
}
}
public class caller implements Runnable{
Thread t;
callMe target;
String msg;
public caller(callMe targ, String msg)
{
target = targ;
this.msg = msg;
t = new Thread(this);
t.start();
}
@Override
public void run() {
synchronized(target)
{
target.call(msg);
}
}
}
public static void main(String[] args) {
Synch1 s = new Synch1();
callMe target = s.new callMe();
caller ob1 = s.new caller(target, "Hello");
caller ob2 = s.new caller(target, "Synchronized");
caller ob3 = s.new caller(target, "world");
try{
ob1.t.join();
ob2.t.join();
ob3.t.join();
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}