cod*_*ody 8 java static calendar thread-safety
我想对一些静态方法使用Calendar并使用静态字段:
private static Calendar calendar = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
现在我读java.util.Calendar不是线程安全的.如何使这个线程安全(它应该是静态的)?
Jon*_*eet 14
如果不是,你不能做一些线程安全的东西.在这种情况下Calendar,即使从中读取数据也不是线程安全的,因为它可以更新内部数据结构.
如果可能的话,我建议改用Joda Time:
如果您必须使用a Calendar,则可以创建一个锁定对象并通过锁定放置所有访问权限.例如:
private static final Calendar calendar = Calendar.getInstance();
private static final Object calendarLock = new Object();
public static int getYear()
{
synchronized(calendarLock)
{
return calendar.get(Calendar.YEAR);
}
}
// Ditto for other methods
Run Code Online (Sandbox Code Playgroud)
虽然这很糟糕.您可以只使用一个同步方法,每次需要时创建原始日历的克隆,当然......通过调用computeFields或者computeTime您可以使后续读取操作线程安全,当然,但我个人而言我不厌其烦.