JUC 简介

java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类
用于定义类似于线程的自定义子系统,包括线程池,异步 IO轻量级任务框架,还提供了设计用于多线程上下文中
Collection实现

volatile、synchronized 和 final 实现可见性。
synchronized 和在 lock、unlock 中操作保证原子性。
volatile 和 synchronized 两个关键字来保证线程之间操作的有序性

volatile 关键字

private volatile int account = 100;
synchronized也能保证可见性,但是效率低
volatile关键字为域变量的访问提供了一种免锁机制,较为轻量级的同步策略:

  1. volatile 修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存,而不是使用寄存器中的值
  2. volatile 不会提供任何原子操作,它也不能用来修饰final类型的变量
  3. volatile 不具备"互斥性"

注:volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性
比如volatile int a = 0;之后有一个操作a++;这个变量a具有可见性,但是a++依然是一个非原子操作,
也就是这个操作同样存在线程安全问题。

i++

java.util.concurrent.atomic包下,提供了常用的原子变量

private AtomicInteger serialNumber = new AtomicInteger();
// 自增运算
serialNumber.getAndIncrement();

猜你喜欢

转载自www.cnblogs.com/loveer/p/11409425.html
JUC