import java.util.ArrayList;
import java.util.List;public class NameList {
private List names = new ArrayList();
public synchronized void add(String name){
names.add(name);
} public synchronized void printAll(){
for(int i=0;i<names.size(); i++){
System.out.print(names.get(i) + " ");
}
}
public static void main(String[] args) {
final NameList s1 = new NameList();
for(int i=0;i<2;i++){
new Thread(){
public void run(){
s1.add("A");
s1.add("B");
s1.add("C");
s1.printAll();
}
}.start();
}
}
}
可能输出为:A B C A A B C A B C
import java.util.List;public class NameList {
private List names = new ArrayList();
public synchronized void add(String name){
names.add(name);
} public synchronized void printAll(){
for(int i=0;i<names.size(); i++){
System.out.print(names.get(i) + " ");
}
}
public static void main(String[] args) {
final NameList s1 = new NameList();
for(int i=0;i<2;i++){
new Thread(){
public void run(){
s1.add("A");
s1.add("B");
s1.add("C");
s1.printAll();
}
}.start();
}
}
}
可能输出为:A B C A A B C A B C
A B C A B C 第二次打印
public synchronized void printAll(){
for(int i=0;i<names.size(); i++){
System.out.print(names.get(i) + " ");
}
System.out.println();
}多次运行后发现的规律是:最后一行中的ABC的个数不少,次序规律是A先出现的个数不会超过B出现的个数,B也不会超出C的个数。
说明了add方法之间确实是同步的(所以最后一行ABC不缺)
printAll方法之间也是同步的
但add和printAll之间并不同步你不换行,就只有猜了。那个结果应该是像2楼推断的那样得到的。