多线程并发编程
2024-01-24 20:07:16 0 举报
AI智能生成
java多线程并发编程
作者其他创作
大纲/内容
并发 基础
AQS
AbstractqueuedSynchronizer同步器
队列同步器
队列同步器
队列同步器
基于模板方法
基于模板方法
以下三个方法来修改同步状态
getState():获取当前同步状态
setState(int newState):设置当前同步状态
compareAndSetState(int expext,int update):使用CAS设置当前状态,该方法能够保证状态设置的原子性
同步器可重写的方法基本为3类
独占式 获取与释放 同步状态
共享式获取与释放不同状态
查询同步队列中的等待线程情况
独占锁
同一时刻只能有一个线程获取到锁,而其他获取锁的线程只能处于同步队列中等待,只有获取锁的线程释放了锁,后继的线程才能获取锁
实现方式
同步队列
FIFO双向队列
FIFO双向队列
独占式同步状态获取与释放
共享式状态获取与释放
CAS
Compare And Swap
缺陷
ABA
ABA解决方案
版本号
版本号
循环时间长 开销大
只能保证一个共享变量的原子操作
线程间通信
volatile和synchronized关键字
等待/通知
经典范例
经典范例
使用wait()、notify()和notifyAll()时需要先对调用对象加锁
调用wait()方法后,线程状态由RUNNING变为WAITING,并将当前线程放置到对象的等待队列
notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或notifyAll的线程释放锁之后,等待的线程 才有机会从wait()返回。
notify()方法将等待队列中的一个等待线程从等待队列 中移到同步队列中,而notifyAll()方法将等待队列中所有的线程全部移到同步队列,被移动的线程状态由WAITING变为BLOCKING .
从wait()方法返回的前提 是获得了调用对象的锁
Thread.join()
ThreadLocal
并发工具类
Cyclicbarrier
同步屏障
同步屏障
应用场景
CountDownLatch
一个线程调用countDown方法happen-before,另外一个线程调用await方法。
Cyclicbarrier与CountDownLatch区别
Semaphore
使用场景
锁
其他
线程通信
并发集合
线程池
原子操作
内存模型
sychronized
0 条评论
下一页