Volatile
是java虚拟机提供轻量级的同步机制
线程6个状态
- new
- runnable
- blocked
- waiting
- timed_waiting
- terminated
Synchronized
锁 对象/class
lock
公平锁/非公平锁(默认)
区别:
Sync
线程之间的通信问题:生产者和消费者问题
wait(),notifyAll()
虚假唤醒
if改成while
condition
await 等待
signal 唤醒
lock.lock()/lock.unlock()
1、锁的是方法的调用者(对象 ),先获取锁的先执行
2、普通方法(没加锁)
Callable
- 可以有返回值
- 可以抛出异常
- 方法不同;call、run
线程启动的方式,有且仅有一个,就是 Thread.start
细节:
1、有缓存
2、会阻塞,结果需要等待
减法计数器:
countDownLatch.countDown();
countDownLatch.aWare();
加法计数器
Cyclicbarrier
信号量
Semaphore
readWriteLock 读写锁
独占锁、共享锁
写只能一个线程执行
读可以多个线程执行
BlockingQueue(队列的大小 )
阻塞队列
写入:满了
取:空
线程池
池化技术
程序的运行,本质:占用系统的资源!优化资源的使用
- 降低资源消耗
- 提高效率
- 方便管理
线程复 用、控制并发数、管理线程
3大方法
Executor.newSingleThreadExcutor()单个线程
Excutors.newFixedThreadPool(5) 创建固定线程池大小
excutors.newCachedThreadPool() 可伸缩
7大参数
ThreadPoolExecutor
拒绝策略
ForkJoin
JMM java内存模型
volatile 是java虚拟机提供轻量级的同步机制
- 保证可见性
- 不保证原子性
- 禁止指令重排(内存屏障)
同步约定
- 线程解锁前,必须把共享变量立刻刷回内存
- 线程加锁前,必须读取主存中的最新值到工作内存中
- 加锁和解锁是同一把锁