Hy,我尝试按照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)
我的代码出了什么问题?为什么结果不欢迎新程序员?
答案 0 :(得分:3)
所有线程几乎同时启动,并相互竞争以获取对共享对象的锁定。
无法保证第二个线程在第三个线程之前请求锁定。即使是这种情况,锁定也不公平,因此无法保证等待锁定的第一个线程将首先获得它。
使用上述代码的唯一保证是,一次只有一个线程能够执行同步方法。