对同步和线程安全感到困惑? java
Confused about synchronization and thread safe ? java
实际上,我对网站或博客上关于同步和线程安全的一些解释感到有点困惑。我对核心 Java Api 或 Java 框架(集合)的不同 class 进行了一些研究。而且我经常注意到一些 class 是同步和线程安全的,这意味着一次只有一个线程可以访问代码。
但我需要一些精确度:
- A class 是同步的 所以 它是线程安全的 ?
- 或者同步和线程安全有两个不同的含义?
此致
A class is synchronize so its thread-safe ?
A class 未同步。而是一种方法或一段代码是同步的。
同步(使用synchronized
)是使代码线程安全的一种方法。还有其他方法。
Or synchronize and thread-safe have two different meaning ?
是的。它们有不同的含义。
And i've often noticed that some class are synchronize and thread-safe which means, at a time, only one thread can access the code.
实际上,如果你 "noticed" 那是你没有注意!
使用synchronized
方法,只有一个线程可以在持有给定锁的情况下访问代码;即你得到互斥。如果两个线程使用不同的锁,那么你不会互斥。
另一件需要注意的事情是仅仅使用 synchronized
并不能保证线程安全。你需要以正确的方式使用它:
- 线程需要在适当的对象/锁上同步
- 线程需要在所有适当的代码中同步
- 如果代码需要获取多个锁,则需要按照避免死锁的顺序获取锁。
实际上,我对网站或博客上关于同步和线程安全的一些解释感到有点困惑。我对核心 Java Api 或 Java 框架(集合)的不同 class 进行了一些研究。而且我经常注意到一些 class 是同步和线程安全的,这意味着一次只有一个线程可以访问代码。
但我需要一些精确度:
- A class 是同步的 所以 它是线程安全的 ?
- 或者同步和线程安全有两个不同的含义?
此致
A class is synchronize so its thread-safe ?
A class 未同步。而是一种方法或一段代码是同步的。
同步(使用synchronized
)是使代码线程安全的一种方法。还有其他方法。
Or synchronize and thread-safe have two different meaning ?
是的。它们有不同的含义。
And i've often noticed that some class are synchronize and thread-safe which means, at a time, only one thread can access the code.
实际上,如果你 "noticed" 那是你没有注意!
使用synchronized
方法,只有一个线程可以在持有给定锁的情况下访问代码;即你得到互斥。如果两个线程使用不同的锁,那么你不会互斥。
另一件需要注意的事情是仅仅使用 synchronized
并不能保证线程安全。你需要以正确的方式使用它:
- 线程需要在适当的对象/锁上同步
- 线程需要在所有适当的代码中同步
- 如果代码需要获取多个锁,则需要按照避免死锁的顺序获取锁。