对Java中的同步和线程安全感到困惑

问题描述 投票:0回答:1

实际上,我对网站或博客上关于同步和线程安全的一些解释有点困惑。我对不同类别的 Core Java Api 或 Java 框架(集合)进行了一些研究。我经常注意到某些类是同步和线程安全的,这意味着一次只有一个线程可以访问代码。

但我需要一些精确度:

  • 类是同步的 所以它是线程安全的?
  • 或者同步和线程安全有两种不同的含义?
java multithreading synchronization thread-safety
1个回答
0
投票

类是同步的,所以它是线程安全的?

某个类不同步。而是同步一个方法或一段代码。

同步(使用

synchronized
)是使代码线程安全的一种方法。还有其他方法。

或者同步和线程安全有两种不同的含义?

是的。它们有不同的含义。


我经常注意到某些类是同步和线程安全的,这意味着一次只有一个线程可以访问代码。

事实上,如果你“注意到”了这一点,那是你没有注意!

使用

synchronized
方法,只有一个线程可以在持有给定锁的同时访问代码;即你会相互排斥。如果两个线程使用不同锁,那么你不会获得互斥。

另一件事需要注意的是,仅仅使用

synchronized
并不能保证线程安全。您需要以正确的方式使用它:

  • 线程需要在适当的对象/锁上同步
  • 线程需要在所有适当的代码中同步
  • 如果代码需要获取多个锁,则需要按照避免死锁的顺序获取锁。
© www.soinside.com 2019 - 2024. All rights reserved.