本文共 761 字,大约阅读时间需要 2 分钟。
(1.8w阅读量,12赞)
(5k阅读量,4赞)
提供互斥访问,同一时刻只能有一个线程对数据进行操作(atomic [əˈtɑːmɪk] 、synchronized);
一个线程对主内存的修改可以及时地被其他线程看到(synchronized、volatile);
一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。
原子性的实现有两种方式:atomic类和synchronized。
2.1、JDK里面提供了很多atomic类,AtomicInteger,AtomicLong,AtomicBoolean等等,它们是通过CAS完成原子性。
2.2、synchronized是一种同步锁,通过锁实现原子操作。
JDK提供锁分两种:一种是synchronized,依赖JVM实现锁,因此在这个关键字作用对象的作用范围内是同一时刻只能有一个线程进行操作;另一种是LOCK,是JDK提供的代码层面的锁,依赖CPU指令,代表性的是ReentrantLock。
synchronized修饰的对象有四种:
对于可见性,JVM提供了synchronized和volatile。
有序性是指,在JVM中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。
可以通过volatile、synchronized、lock保证有序性。
转载地址:http://yjvtz.baihongyu.com/