Java:关于克隆方法的问题

时间:2012-02-09 02:34:13

标签: java concurrency singleton clone

我在接受采访时得到了这些问题。

  
      
  1. 我们是否需要在并发环境中处理克隆方法?我们可以同步克隆方法吗?

  2.   
  3. 在单例类中使用clone方法是否有意义?

  4.   

在采访中我没有令人信服的答案。

2 个答案:

答案 0 :(得分:2)

  1. 可能是99.99%的时间,但你只需要像你班级的任何其他方法一样考虑克隆,并根据你的具体情况进行必要的同步。同步其Base类中未同步的方法没有任何问题。另一方面,在覆盖同步方法时不同步方法可能是一个错误,即使代码编译正常并且没有发出警告......

  2. 单身设计模式上的几句话可能是一个令人信服的答案。

答案 1 :(得分:1)

  1. 如果您正在克隆一个在其他线程中可能发生变化的对象,那么您可能需要获取某种[read]锁定,就像您正在对其进行任何其他操作一样。从理论上讲,如果新对象可能受到不安全的发布,你需要对新对象进行锁定(我建议不要安全地发布可变对象!)。

  2. 如果你可以创建它的另一个实例,它就不会是单例(有单一的反模式,就像单例反模式一样,只会更糟,并且可能涉及多个对象,没有明确的目的)。我想如果你继承了一些实现Cloneable的类,你想覆盖clone并且可以抛出CloneNotSupportedException,或者返回this