java并发_学习_04_线程安全
一、基本概念
1.定义
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的
2.三性
(1)原子性
提供了互斥访问,同一时刻只能有一个线程来对它进行操作
(2)可见性
一个线程对主内存的修改可以及时的被其他线程观察到
(3)有序性
一个线程观察其他线程中的指令执行顺序,由于指令重琲序的存在,该观察结果一般杂乱无序
3.原子性
(1)automic包
(2)锁:
synchronized :依赖JVM
Lock :依赖特殊的CPU指令,代码实现, ReentrantLock
比较:
synchronized:不可中断锁,适合竞争不激烈,可读性好
Lock:可中断锁,多样化同步,竞争激烈时能维持常态
Atomic:竞争激烈时能维持常态,比Lock性能好;只能同步一个值