2

在从 Oracle ResultSet 检索时间戳时,我必须使用 Calendar 对象。我想在类级别定义日历对象,以便多个线程可以以这种方式使用它的单个实例。我知道 Calendar 本身不是线程安全的,但我不清楚 Oracle 的 ResultSet.getTimestamp(String, Calendar) 实现如何在幕后使用它。查看 MySQL 的源代码,Calendar 严格用于提取 TimeZone 对象(似乎也没有改变),因此对于 MySQL,它似乎是线程安全的。任何人都可以阐明 Calendar 的单个实例是否可以安全地与 Oracle 在多线程环境中实现此方法一起使用?

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Timestamp ts = rs.getTimestamp("example",cal);
4

1 回答 1

3

由于 Oracle 驱动程序不是开源的,所以很难说。我想你可以反编译驱动程序以查看它的作用,但我不会冒险。

首先,我会对您的应用程序进行基准测试,以确定创建Calendar. 它可能足够便宜,您不必担心它 - 只需按需创建一个。如果你还是觉得太贵,那就用aThreadLocal来装。假设您使用线程池,那么您将获得重用的Calendar对象,而无需担心线程安全。

于 2012-05-04T20:48:21.937 回答