public class NamedCounter {                                                                        
private final String name;                                                                         
private int count; public NamedCounter(String name) { this.name = name; }                          
public String getName() { return name; }                                                           
public void increment() { count++; }                                                               
public int getCount() { return count; }                                                            
public void reset() { count = 0; }                                                                 
}                                                                                                  
                                                                                                   
Which three changes should be made to adapt this class to be used safely by multiple threads?      
(Choose three.)                                                                                    
                                                                                                   
A.  declare reset() using the synchronized keyword                                                 
B.  declare getName() using the synchronized keyword                                               
C.  declare getCount() using the synchronized Keyword                                                                                                                                                                                  
D.  declare the constructor using the synchronized keyword                                         
E.   declare increment() using the synchronized keyword                                            
                                                                                                   
Answer: ACE    我觉得唯有E是正确的                                                            

解决方案 »

  1.   

    当改变一个类中的属性值的时候,都需加synchronized关键字,要不然会造成不同步。
      

  2.   

    请ls解释一下count = 0; 为什么也需要同步?
    要说i++这种,我记得执行时候是分三步的,但直接赋个数值不会吧。
      

  3.   

     return counts虽然是原子操作,但是它是不安全的,因为它有可能返回一个不稳定的中间状态,而且它也存在可视性问题。
     Long和double以外的基本类型的读写操作都是原子操作,应该是不需要同步的,所以不知道为什么选A
      

  4.   

    C显然也不该选 。LS:不稳定的中间状态是指什么?谢谢
      

  5.   

    我理解的是因为没有voatile修饰counts所以修改后的counts不是立即被刷新至主存而是被暂时的存储在处理器的缓存里,因此会存在此counts的不同试图,所以是不安全的
      

  6.   


    好像有点矛盾 是我理解错了
    counts 是 int的是基本类型 return counts属于基本操作 但是它是不安全的 和下面的 应该是不需要同步的  好像有点矛盾 
    关于 不稳定的中间状态,存在可视性听过不太懂
      

  7.   

    我说的应该不需要同步是说A选项啊,就是那个public void reset() { count = 0; }   
    可是return counts是不安全的,原因我在5楼回复了
      

  8.   


    哦 明白了
    能不能在解释一下原子操作中 除了 return 语句外 还有那些是不安全的
      

  9.   

    大家看看这个博客 写的对不对
    http://blog.csdn.net/mabaolin/archive/2007/06/15/1653178.aspx
      

  10.   

    丫..我觉得选CE,不知道A怎么出来的