gpt4 book ai didi

java - Java中同步代码输出顺序错误

转载 作者:行者123 更新时间:2023-12-01 23:07:11 24 4
gpt4 key购买 nike

我目前正在学习Java,并且已经谈到了同步主题。

由于某些原因,下面的代码(基于The Complete Reference JAVA - Herbert Schildt 第 7 版,第 239-240 页中的代码)没有给出所需的输出。

>

代码:

package package1;
class Call{
synchronized public void call(String msg){
System.out.print("[" + msg);
try{
Thread.sleep(100);
}catch (InterruptedException e){
System.out.println("Interrupted Exception Caught");
}
System.out.println("]");
}
}

class CallMe implements Runnable{
String msg;
Call target;
Thread t;

public CallMe(Call targ, String message){
target = targ;
msg = message;
t = new Thread(this);
t.start();
}

public void run(){
target.call(msg);
}
}

public class Synchronization {
public static void main(String[] args) {
Call target = new Call();
CallMe obj1 = new CallMe(target, "Hello");
CallMe obj2 = new CallMe(target, "Synchronized");
CallMe obj3 = new CallMe(target, "World");

try{
obj1.t.join();
obj2.t.join();
obj3.t.join();
}catch (InterruptedException e){
System.out.println("Interrupted Exception Caught");
}
}
}

所需的输出:

[Hello]
[Synchronized]
[World]

实际输出(我在 2013 年末的 Macbook Pro 上使用 Eclipse):

[Hello]
[World]
[Synchronized]

我了解到所有这些主题的输出因计算机而异。

有人可以解释一下为什么这不起作用吗?

最佳答案

因为不同的 CallMe 实例是并行调用的,并且您无法保证它们的处理顺序。您唯一知道的是,Call.call(String) 不会并行调用,因为此方法是同步

关于java - Java中同步代码输出顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com