Java有两种方法可以实现同步。当我在方法之后使用 synchronized关键字时,我的代码给出了正确的答案,但是当我使用 synchronized块时,我输错了输出。这是给出错误输出的代码。 我使用eclipse IDE编译并运行此代码。
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();
}
}
}
答案 0 :(得分:0)
我已经尝试过您提供的代码示例并且工作正常。当您使用线程时,要记住线程可以按任何顺序运行并且它不在控制之外,即,我们每次都不能期望相同的输出。对于每次运行,您可能获得相同的输出或不可能。它是用java设计的。这是你期待的还是其他任何东西。