【问题标题】:Is ResultSet.getTimestamp(String, Calendar)'s use of the Calendar object thread safe?ResultSet.getTimestamp(String, Calendar) 使用 Calendar 对象线程是否安全?
【发布时间】:2012-05-04 20:32:34
【问题描述】:

在从 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);

【问题讨论】:

    标签: java oracle jdbc thread-safety timestamp


    【解决方案1】:

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

    首先,我会对您的应用进行基准测试,以确定创建 Calendar 的成本。它可能足够便宜,您无需担心 - 只需按需创建一个。如果您仍然认为它太贵,请使​​用ThreadLocal 持有它们。假设您使用线程池,那么您可以重复使用 Calendar 对象,而无需担心线程安全。

    【讨论】:

    • 是的,我也在想同样的事情。即使我发现它是线程安全的(通过反编译),也不能保证它会在后续的驱动程序版本中保持这种状态。
    猜你喜欢
    • 2013-07-30
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多