首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calendar对象克隆方法

Calendar对象克隆方法
EN

Stack Overflow用户
提问于 2014-05-22 11:01:30
回答 1查看 219关注 0票数 0
代码语言:javascript
复制
public class CalendarTest {

    private Calendar cal;

    public void setCalendar(Calendar cal){
        this.cal = (Calendar) cal.clone();   (1)
    }

    public static void main(String args[]){
        CalendarTest obj = new CalendarTest();
        Calendar cal = new GregorianCalendar();
        new Thread(new Runnable() {

            @Override
            public void run() {
                //cal.setSomething;  (2)

            }
        }).start();
        obj.setCalendar(cal);
    }
}

在(1)处对调用对象调用clone(),同时,如果在(2)处更改了cal的状态,则克隆将如何表现。例如,如果一个线程正在克隆日历对象的字段,而其他线程正在写入相同的日历对象,这是否会导致日历对象不一致。

我如何处理这类场景?

在main方法中创建线程只是一个例子,客户端代码通常会调用setCalendar()方法。

EN

回答 1

Stack Overflow用户

发布于 2014-05-22 11:14:29

这种行为将是不确定的。有时克隆将包含在(2)处的更改之前的字段的副本,有时克隆将包含在(2)处的更改之后的字段的副本,有时它可能仅包含(2)处的一些更改。

Semaphore或类似位置使用可使行为具有确定性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23797136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档