求一道笔试题的解答。。。 多线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 答案应该是abcabcabc。其实如果你在 public synchronized void printAll(){ for(int i=0;i<names.size();i++){ System.out.print(names.get(i)+""); } //加上一句换行,你就应该明白结果了。 System.out.println(); }你的add和printAll方法都是加锁了的。所以你创建两个线程时,第一个线程创建,添加a,b,c到List里面,然后调用printAll方法输出整个List里面的内容,第二个线程创建后,又添加了a,b,c到List里面,此时List里面是有2个abc即6个元素的。所以第二个线程调用printAll会打印abcabc。如果你把你的线程数设置为3个的话,那结果给就是1+2+3=6个abc了。加一个换行就能清晰的看到每个线程打印的元素。 不好意思,刚刚没有想清楚,答案是不固定的,因为当线程1在运行时,线程2有可能抢夺到系统资源,而进行add操作。我上面说到的那种情况,没有考虑多线程下,线程抢夺资源线程切换的问题。不好意思。希望各位勿喷。 javac 俺内存不够了,想把jre的内存调小店,怎么做 JAVA初学者的疑问? java web start 启动混乱 如何获得鼠标移动的轨迹。(不按鼠标左键和右键)用什么(java)API实现。 java如何取得文件夹下所有的子目录 有关jtextpane的问题 关于数据库中的数据类型转换的问题 怎样从compute语句中获得多个结果集??????????? 请教:错在哪里? 错误: 程序包不存在 反射简单问题
其实如果你在 public synchronized void printAll(){
for(int i=0;i<names.size();i++){
System.out.print(names.get(i)+"");
}
//加上一句换行,你就应该明白结果了。
System.out.println();
}你的add和printAll方法都是加锁了的。所以你创建两个线程时,
第一个线程创建,添加a,b,c到List里面,然后调用printAll方法输出整个List里面的内容,
第二个线程创建后,又添加了a,b,c到List里面,此时List里面是有2个abc即6个元素的。所以第二个线程调用printAll会打印abcabc。
如果你把你的线程数设置为3个的话,那结果给就是1+2+3=6个abc了。
加一个换行就能清晰的看到每个线程打印的元素。
我上面说到的那种情况,没有考虑多线程下,线程抢夺资源线程切换的问题。
不好意思。希望各位勿喷。