一尘不染

'synchronized' 是什么意思

java

我对synchronized关键字的用法和重要性有一些疑问。

  • synchronized关键字的意义是什么?
  • 方法synchronized什么时候应该?
  • 从程序上和逻辑上是什么意思?

阅读 458

收藏
2020-02-26

共2个答案

一尘不染

synchronized关键字是所有不同的线程读取和写入相同的变量,对象和资源。这不是Java中的琐碎话题,但以下是Sun的引文:

synchronized 方法提供了一种防止线程干扰和内存一致性错误的简单策略:如果一个对象对一个以上线程可见,则对该对象变量的所有读取或写入均通过同步方法完成。

简而言之:当你有两个线程正在读取和写入同一个“资源”时,说一个名为的变量foo,你需要确保这些线程以原子方式访问该变量。如果没有synchronized关键字,线程1可能看不到线程2对所做的更改foo,或者更糟的是,它可能只更改了一半。这在逻辑上不会是你所期望的。

同样,这是Java中不平凡的主题。要了解更多信息,请在SO和Interwebs上探索有关以下主题:

  • 并发
  • Java内存模型

继续探索这些主题,直到名称“ Brian Goetz”与大脑中的“并发”一词永久关联。

2020-02-26
一尘不染

synchronized关键字防止由多个线程的代码或目标块的并发访问。默认情况下,a Hashtablesynchronized,因此一次只能有一个线程访问该表。

在使用non-synchronized类似的结构时HashMap,必须在代码中构建线程安全功能,以防止出现内存一致性错误。

2020-02-26