博客
关于我
Java中线程安全的体现(原子性、可见性、有序性)
阅读量:587 次
发布时间:2019-03-11

本文共 761 字,大约阅读时间需要 2 分钟。

0、相关文章:

(1.8w阅读量,12赞)

(5k阅读量,4赞)

1、线程安全在三个方面体现

1.1、原子性:

提供互斥访问,同一时刻只能有一个线程对数据进行操作(atomic [əˈtɑːmɪk] 、synchronized);

1.2、可见性:

一个线程对主内存的修改可以及时地被其他线程看到(synchronized、volatile);

1.3、.有序性:

一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。

2、原子性

原子性的实现有两种方式:atomic类和synchronized。

2.1、JDK里面提供了很多atomic类,AtomicInteger,AtomicLong,AtomicBoolean等等,它们是通过CAS完成原子性。

2.2、synchronized是一种同步锁,通过锁实现原子操作。

JDK提供锁分两种:一种是synchronized,依赖JVM实现锁,因此在这个关键字作用对象的作用范围内是同一时刻只能有一个线程进行操作;另一种是LOCK,是JDK提供的代码层面的锁,依赖CPU指令,代表性的是ReentrantLock。

synchronized修饰的对象有四种:

  • (1)修饰代码块,作用于调用的对象;
  • (2)修饰方法,作用于调用的对象;
  • (3)修饰静态方法,作用于所有对象;
  • (4)修饰类,作用于所有对象。

3、可见性

对于可见性,JVM提供了synchronized和volatile。

4、有序性

有序性是指,在JVM中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。

可以通过volatile、synchronized、lock保证有序性。

转载地址:http://yjvtz.baihongyu.com/

你可能感兴趣的文章
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
mysql problems
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>