什么是线程安全和线程兼容的区别?
- 线程兼容的含义是什么?
- 线程兼容的用例是什么?
更新:我在流观察者的grpc文档中找到了这个定义。
此外,我还找到了描述线程安全性的文章,但对我来说仍不清楚。
如果一个方法要求在同步块中执行,那么这意味着它只是线程不安全的吗?
什么是线程安全和线程兼容的区别?
更新:我在流观察者的grpc文档中找到了这个定义。
此外,我还找到了描述线程安全性的文章,但对我来说仍不清楚。
如果一个方法要求在同步块中执行,那么这意味着它只是线程不安全的吗?
线程安全是指一个对象可以被多个线程同时使用而仍然正确。
线程不安全是指该对象执行某些操作(更改静态状态、线程本地存储等),从而导致其无法保证线程安全。
线程兼容是指既不是线程安全,也不是线程不安全 - 因此要满足线程安全性,用户必须自己执行同步。
1 但正确性的定义略有不同...
Java In Theory And In Practice 根据类的规范来定义这个概念。
Google 的 Geoff Romer 和维基百科将其定义为简单地缺乏数据竞争。
我通常希望它意味着没有崩溃、死锁或其他意外情况。
线程安全意味着对象可以在多个线程中并发使用,这是由Java自身实现的;虽然线程兼容不是线程安全的,但当您在非线程安全代码中包围一些同步代码或拥有包装器对象时,它仍然可以安全地并发使用。也就是说,您需要自己实现线程安全。
看起来线程兼容
的定义源自于Joshua Bloch的Effective Java第一版。不管它值不值得,它在第二版中已经不存在了。在第二版中,我们有以下分类:
在我看来,线程兼容
被重命名为非线程安全
。
条件线程安全
。Beam 的文档使用了术语“线程兼容”,就像 条件线程安全
的含义一样。(https://beam.apache.org/documentation/programming-guide/#requirements-for-writing-user-code-for-beam-transforms) - Jason Kim