gpt4 book ai didi

java - 同步的java线程错误的输出顺序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:40 26 4
gpt4 key购买 nike

嗨,我试着按照这个 http://www.studytonight.com/java/synchronization.php

这是我的代码

class First {
public void display(String msg)
{
System.out.print("["+msg);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
System.out.println("]");
}
}

class Second extends Thread{
String msg;
First fobj;

Second(First fp,String str){
msg=str;
fobj=fp;
start();
}

public void run(){
synchronized(fobj){
fobj.display(msg);
}
}
}

public class Main {

public static void main(String[] args) {
// TODO code application logic here
First f=new First();
Second s1=new Second(f,"welcome");
Second s2=new Second(f,"new");
Second s3=new Second(f,"programmer");
}

}

这是我的结果

run:
[welcome]
[programmer]
[new]
BUILD SUCCESSFUL (total time: 3 seconds)

我的代码有什么问题?为什么结果不欢迎新程序员?

最佳答案

所有线程几乎同时启动,相互竞争获取共享对象的锁。

不能保证第二个线程在第三个线程之前请求锁。而且即使是这样,锁也是不公平的,所以也不能保证第一个等待锁的线程会先拿到。

上述代码的唯一保证是一次只有一个线程能够执行同步方法。

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

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