java的一问? 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 s=new NameList(); for(int i=0;i<2;i++){ new Thread(){ public void run(){ s.add("A"); s.add("B"); s.add("C"); s.printAll(); } }.start(); } }
} 输出的结果第一种情况:A B C A B C A B C 输出的结果第二种情况:A B C A A B C A B C 第一个结果我懂,但是这第二种结果是怎么冒出来的啊?不明白!求解
------解决方案--------------------
你将方法 设置为了同步,进行了加锁,理论上应该不会出现第2种情况吧,我试了很多次 都只得能得到第一种情况。 我觉得出现第二种情况的原因是:在第一个线程加进A B C 后,还没有打印,cpu被第2个线程抢走,线程2加入一个 A ,又线程1抢回去,打印出 A B C A,然后线程2继续加入 B C,然后打印出 A B C A B C,所以最后结果为 A B C A A B C A B C 。如果这样想的话 ,感觉那个同步就没起到应有的作用了。(求讨论)
------解决方案--------------------