synchronized与volatile的区别

news/2024/5/17 15:48:24 标签: 线程安全, volatile, synchronized

1)关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法以及代码块,随着JDK新版本的发布,synchronized关键字在执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。

2)多线程访问volatile不会发生阻塞,而synchronized会出现阻塞。

3)volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步。

4)关键字volatile解决的是变量在多个线程之间的可见性;而synchronized解决的是多个线程之间访问资源的同步性。

线程安全包含原子性和可见性两个方面,java同步机制都是围绕这两个方面来确保线程安全的。


http://www.niftyadmin.cn/n/1735702.html

相关文章

toLowerCase方法

toLowerCase()方法用来返回一个字符串,该字符串中的字母被转换成小写字母,而且对非字母字符不会产生影响 示例如下: public class TwoLowerCaseTest {public static void main(String[] args) {String t "Hello World AQWEsd123^&…

java中计算包含汉字字符串的长度

java中: 1字符2字节,1字节8位 英文和数字占一个字节,中文占一个字符,也就是两个字节 在计算的字符串长度的时候,若有汉字,直接用String.length()方法是没法计算出准确的长度,如: …

sql插入语句返回自增主键

在操作数据库中,插入一条记录,表中的主键是自增的,如果我们需要获得这个主键,就需要在插入的时候,返回这条主键,写法如下:INSERT INTO gusers_xxxx_log(user_id,admin_user,change_amount,total…

定时任务用到的cron时间表达式 CronTrigger

CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。 CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”&a…

java中获取当前时间以及对当前时间操作详解

java中时间的操作一直是自己的一个短板,希望这次总结后,会加深印象 在jdk1.0中,Date类是唯一的一个代表时间的类,但是Date类不便实现国际化,所以从JDK1.1开始,推荐使用Calendar类进行时间和日期的处理 一…

快速入门uniapp——从环境搭建到项目实践

🙂博主:小猫娃来啦 🙂文章核心:快速入门uniapp——从环境搭建到项目实践 文章目录 初步介绍UniApp开发环境搭建下载和安装UniApp开发工具创建新项目(HBuilderX)开发工具界面介绍 UniApp基础知识页面结构页面…

sql 时间转换问题 from_unixtime() UNIX_TIMESTAMP()

from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 %Y%m%d 主要是将返回值格式化 例如: mysql>SELECT FROM_UNIXTIME( 1249488000, %Y%m%d ) ->20071120 mysql>SELECT…

for循环与mysql的分页查询

这两天写了一个定时任务,关于查询表中快过期的卡,发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到分页查询&#xf…