作者sheep922420 ()
看板java
标题[问题] SCJP 多执行绪问题
时间Thu Aug 29 14:49:45 2013
第233题
Given:
1. public class Threads1{
2. int x = 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 rl = 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
我的问题是在A,
我的认知是, main 方法中呼叫 go 方法
而 go方法依序 呼叫了 new Thread(r1).start();
new Thread(r1).start();
程式执行的顺序是 第一条执行绪 跑了回圈三次 并对 x 及 current 变数做修改
再由第二条执行绪取得执行, 跑了回圈四次
可是 A 最後一个输出却是 6
用eclipse 测试这个 code 也确实输出会有递增後又减少的情形
我想应该是我误解程式执行的流程
想请问版上高手我错误的点在哪???
谢谢!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.226.53
1F:推 PsMonkey:t1 第三次跑完 L8 之後 t2 执行并跑完,然後 t1 续跑 L9 08/29 15:07
2F:→ PsMonkey:应该没有规定回圈跑完才能被抢走执行权吧? [心虚状] 08/29 15:08
3F:→ sheep922420:感谢楼上两位大大!!! 08/29 18:36
4F:→ tsungchic:不过我可以确定1~2楼是同一个人 08/29 22:33
5F:→ PsMonkey:有当老板的潜能,一个人当两个人用 XD 08/29 23:12