又是线程题。。。

yidaimi 2008-12-22 11:32:40
1. public class Threads 1 {
2. intx=0;
3. public class Runner implements Runnable {
4. public void run() {
5. int current = 0;
6. for(int=i=0;i<4;i++){
7. current = x;
8. System.out.print(current + “, “);
9. x = current + 2;
10. }
11. }
12. }
13.
14. public static void main(String[] args) {
15. new Threads1().go();
16. }
17.
18. public void go() {
19. Runnable r1 = new Runner();
20. new Thread(r1).start();
21. new Thread(r1 ).start();
22. }
23. }
Which two are possible results? (Choose two.)
A. 0, 2, 4, 4, 6, 8, 10, 6,
B. 0, 2, 4, 6, 8, 10, 2, 4,
C. 0, 2, 4, 6, 8, 10, 12, 14,
D. 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14,
E. 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,
答案是AC,很不解,求高人解答,谢谢!

...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jue_Xin 2008-12-26
  • 打赏
  • 举报
回复
evilmars正解.
lgcsyq 2008-12-24
  • 打赏
  • 举报
回复
A答案是错的
但是d到应该是正确的
yidaimi 2008-12-24
  • 打赏
  • 举报
回复
回楼上的,不对啊,那么A答案最后两位为什么是10, 6,?他们不是差距超过2了?
evilmars 2008-12-24
  • 打赏
  • 举报
回复
在current=x后,第一个线程阻塞,a中出现的情况是current=6后然后第一个线程阻塞,执行第二个线程,此时x=6,所以第二个线程打印出的第一个数字是4,继续执行第二个线程结束,第一个线程继续执行,打印出6
我上面写的有一点错误
0, 2, 4, 4, 6, 8, 10, 6
这样应该是对的
二楼说的相差不超过2是错误的
evilmars 2008-12-24
  • 打赏
  • 举报
回复
回楼上的,不对啊,那么A答案最后两位为什么是10, 6,?他们不是差距超过2了?
==================================================================

有两个线程
0, 2, 4, 4, 6, 8, 10, 6
这样你就可以理解了吧?
二楼的讲得没错
sailing19 2008-12-23
  • 打赏
  • 举报
回复
你打的程序很多错误啊,还好不影响阅读。
Thread1 和 Thread2 都会共用一个变量 x,你仔细分析7-9行,很容易看出连续打出的2个数的差距不可能大于2,并且由于每个线程都循环4次,所以打出的结果是8个数字。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧