最近准备要考SCJP,所以有很多问题,包涵包涵哈

[复制链接]
查看11 | 回复1 | 2009-8-2 20:44:23 | 显示全部楼层 |阅读模式
Question 127
Given:
1. public class TestFive {
2. private int x;
3. public void foo() {
4 int current =
x;
5. x
= current + 1;
6. }
7. public void go() {
8.
for(int i=0;i<5;i++) {
9. new Thread() {
10. public void run() {
11. foo();
12. System.out.print(x + !°, !°)
13. } }.start();
14. }}}
Which two changes, taken together, would guarantee the output: 1, 2,
3, 4, 5, ? (Choose two.)
A. Move the line 12 print statement into the foo() method.
B. Change line 7 to public synchronized void go() {.
C. Change the variable declaration on line 3 to private volatile int x;.
D. Wrap the code inside the foo() method with a synchronized( this )
block.
E. Wrap the for loop code inside the go() method with a synchronized
block synchronized(this) { // for loop code here }.
Answer: AD
为什么要选A而不选B呢,而且我觉得A让结果没怎么变啊

回复

使用道具 举报

千问 | 2009-8-2 20:44:23 | 显示全部楼层
同步的目的就是为了每增加一个就输出一下,所以增加和输出要放在同一代码块内并且要加同步。AD搭配才能有效果。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行