import java.util.*;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 sl = new NameList();
for (int i = 0; i < 2; i++) {
new Thread() { @Override
public void run() {
sl.add("A");
sl.add("B");
sl.add("C");
sl.printAll();
}
}.start();
} }
}为什么有的时候会输入3组ABC,比如ABCABCABC,有的时候4组,比如AABBCCAABBCC呢?
为什么不是2组?谢谢了!
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 sl = new NameList();
for (int i = 0; i < 2; i++) {
new Thread() { @Override
public void run() {
sl.add("A");
sl.add("B");
sl.add("C");
sl.printAll();
}
}.start();
} }
}为什么有的时候会输入3组ABC,比如ABCABCABC,有的时候4组,比如AABBCCAABBCC呢?
为什么不是2组?谢谢了!
for循环执行第一次的时候 names的值ABCABC 打印ABCABCAABBCCAABBCC这种情况2个线程交替打印,我觉得没有这种可能
而输出AABBCCAABBCC是因为输入数据进names时两个线程交替执行add()方法,第一个输入A接着第二个线程输入A,依次下去,names里的数据为AABBCC,到此时线程1输出AABBCC,接着线程2输出AABBCC,最终就得AABBCCAABBCC
这里不清楚你说的2组是什么意思?
谢谢 cangyingzhijia!
第一次, sl.add("A");
sl.add("B");
sl.add("C");
sl.printAll();
打印 ABC 并且放到 List中
第二次, sl.add("A"); ABCA
sl.add("B"); ABCAB
sl.add("C");ABCABC
sl.printAll(); 打印 ABCABC
总打印为 ABCABCABC