voliate和synchronized的区别
时间: 2024-05-18 21:13:53 浏览: 15
voliate和synchronized是Java中用于多线程编程的关键字,它们有以下几点区别:
1. 原子性:synchronized保证语句块内操作是原子的,而voliate只能保证可见性,无法保证操作的原子性。
2. 可见性:synchronized保证可见性,因为在执行unlock之前,必须先把变量同步回主内存。而voliate同样也保证可见性,因为它能保证线程之间的数据同步。
3. 有序性:synchronized保证有序性,因为一个变量在同一时刻只允许一条线程对其进行lock操作。而voliate不能保证有序性,它只能保证被修饰的变量的修改对其他线程是可见的。
4. 使用方式:synchronized是通过关键字来标记同步块,在同一个对象上同步的所有同步块一次只能在其中执行一个线程,其他线程会被阻塞直到同步块内的线程退出该块。而voliate是通过关键字来修饰变量,用于保证线程对该变量的修改对其他线程是可见的。
5. 可重入性:synchronized是可重入的,不会自己把自己锁死,同一个线程可以多次获取同一个锁。而voliate没有锁的概念,所以不存在可重入性的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Volatile和Synchronized区别](https://blog.csdn.net/Elroy1230/article/details/123639656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)