发布日期:2018-03-26
JAVA中的synchronized是什么意思?+ 查看更多
JAVA中的synchronized是什么意思?
+ 查看更多
发布日期:2018-03-10 11:44
分类:JAVA
浏览次数:158
在synchronized关键字的用法和意义上我有一些问题。
- synchronized关键字的意义是什么?
- 什么时候需要使用synchronized方法?
- 在编程和逻辑角度上它意味什么?
回答
synchronized关键字是处理对于不同线程对同一变量、对象和资源的读写问题。这个问题在 JAVA 中不是很简单就能给你解释的,不过 Sun 说过这样一句话,你看看:
synchronized方法使用一种简单的策略,使得线程之间的干扰和内存一致性错误得到了预防。如果一个对象中明显有一个以上的线程,它们是使用synchronized方法来读取或写入对象的变量。
我给你非常简单的概括一下:当你有两个线程需要去读和写同一个资源,我们把这个资源叫 foo ,你要保证这些线程访问这些变量是一种原子级的方式。如果没有同步关键字,你的线程1也许会看不见线程2对 foo 的改变,也有可能更糟糕,这个变量只被改变了一半。这肯定不是你逻辑上期待的那样。
我再说一遍,在 JAVA 中这个不是很容易就能说清楚的话题。你如果想了解更多,去SO里探索更多相关的话题并且下面的网址也看一下:
- Concurrency
- Java Memory Model
兄弟,继续探索这些话题直到 " Brian Goetz " 这个名字永远和你脑海里 " concurrency "这个术语联系起来。