【问题标题】:Java Static Thread safetyJava 静态线程安全
【发布时间】:2014-09-16 03:05:48
【问题描述】:

关于这个问题,我有一个子问题

Are non-synchronised static methods thread safe if they don't modify static class variables?

如果我在 Singleton 类中定义了这个方法

public static Date getDateDiff(Date a, Date b){
    return a-b;
}

如果两个线程同时并发调用这个方法,传递不同的a,b,那么会得到正确的结果吗?

我的理解是他们应该得到,因为每个人都在传递不同的日期对象,其他人无法访问......

在什么情况下会因为覆盖 Date 对象而得到错误的结果?

【问题讨论】:

  • 在您看来,链接问题与您的问题有什么区别?我没有看到。
  • @usr 不同之处在于他的问题中传递的参数是可变的。
  • Tomasz 对链接问题的回答回答了这个问题,如果传入的对象是可变的,那么其他线程可以同时篡改它们。我看不出这个问题与链接的问题有何不同。
  • 其实我没有在那个问题中找到答案,所以我决定更简单、更具体……除了可以帮助其他人

标签: java multithreading methods static


【解决方案1】:

是的,两个线程都会得到正确的结果。如果存在任何其他非线程安全代码,其中另一个线程可能正在修改由其他线程之一传递的 a 或 b,则结果不正确的情况。就像您链接到的问题中的其他答案一样,如果 a 或 b 与另一个线程共享,并且他们在另一个线程使用它时对其进行了修改,您可能会遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2012-09-22
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多