我在2线程对象上调用start方法,其中我使用的是同步代码块,其中我调用了Synchronized方法首先删除。我没有随机输出。我的代码如下:
import java.util.*;
public class NameList {
private List names =new LinkedList();
public synchronized void add(String name)
{ System.out.println(Thread.currentThread().getName());
names.add(name);
}
public synchronized String removeFirst()
{ System.out.println(names.size());
System.out.println(Thread.currentThread().getName());
if (names.size() > 0)
{ System.out.println(Thread.currentThread().getName());
return (String) names.remove(0);
}
else
return null;
}
public static void main(String[] args) {
final NameList nl = new NameList();
nl.add("Ozymandias");
class NameDropper extends Thread {
public void run() {
synchronized(this)
{ String name = nl.removeFirst();
System.out.println(name);
}
}
}
Thread t1 = new NameDropper();
t1.setName("l1");
Thread t2 = new NameDropper();
t2.setName("l2");
t1.start();
t2.start();
}
}
我每次都会得到不同的输出。 任何人都可以帮助我理解这种多线程行为。
提前致谢。