【问题标题】:What is the difference between thread safe and thread compatible?线程安全和线程兼容有什么区别?
【发布时间】:2019-03-13 20:18:47
【问题描述】:

线程安全和线程兼容有什么区别?

  • 线程兼容是什么意思?
  • 线程兼容的用例是什么?

统一更新: 我在grpc documentation of StreamObserver 中找到了这个定义。

另外,我找到了Characterizing thread safety 的链接,但我仍然不清楚。

如果一个方法需要在同步块中,这意味着它只是线程不安全的?

【问题讨论】:

  • 您甚至可以在哪里找到“线程兼容”一词的一些上下文会很棒,我什至从未听说过。我想区别在于用户将在多大程度上参与确保 API 以一种被认为是“线程安全”的方式使用
  • 即使我从未听说过“线程兼容”这个词。您可以发布源的完整上下文吗?
  • 我已经用上下文信息更新了问题。
  • 看起来这个词是在“Effective Java 1st edition”中创造的——请看下面我的回答。
  • 这是另一个提到这个术语的框架文档,beam.apache.org/documentation/programming-guide/…

标签: java multithreading concurrency thread-safety grpc


【解决方案1】:

线程安全意味着一个对象可以被多个线程同时使用并且仍然是正确的1

线程敌对意味着对象做了一些事情(改变静态状态,线程本地存储等),阻止它成为线程安全的。

线程兼容意味着不是线程安全,但不是线程敌对 - 所以为了满足线程安全,用户必须自己执行同步 p>


1 但是正确性的定义略有不同...

Java In Theory And In Practice 根据类的规范定义这个。

Geoff Romer at Google 和 Wikipedia 将其定义为缺乏数据竞争。

我通常希望这意味着没有崩溃、死锁或其他意外。

【讨论】:

    【解决方案2】:

    线程安全是指对象在多个线程中并发使用是安全的,由java self实现; 尽管线程兼容不是线程安全的,但当您在非线程安全代码中包含一些同步代码或有一个线程安全的包装对象时,它仍然可以安全地并发使用。也就是说,您应该自己实现。

    【讨论】:

      【解决方案3】:

      看起来thread compatible 的定义是由于 Joshua Bloch 在Effective Java 1st edition中的。不管它值多少钱,它都不会出现在第二版中。在第二版中,我们有以下分类法

      • 不可变
      • 无条件线程安全
      • 有条件的线程安全
      • 不是线程安全的
      • 线程敌对

      在我看来 thread compatible 已重命名为 not thread-safe。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 2010-09-17
      • 2021-05-23
      • 2013-01-31
      • 2012-08-07
      相关资源
      最近更新 更多