java多线程并发编程技巧分享
2022-10-13 10:29:07 0 举报
AI智能生成
登录查看完整内容
java多线程并发编程技巧分享
作者其他创作
大纲/内容
AbstractqueuedSynchronizer同步器
getState():获取当前同步状态
setState(int newState):设置当前同步状态
以下3个方法来 修改同步 状态
独占式 获取与释放 同步状态
共享式获取与释放不同状态
查询同步队列中的等待线程情况
同步器可重写的方法基本 为3类
队列同步器
同一时刻只能有一个线程获取到锁,而其他获取锁的线程只能处于同步队列中等待,只有获取锁的线程释放了锁,后继的线程才能获取锁
独占锁
同步队列
独占式同步状态获取与释放
共享式同步状态获取与释放
实现方式
AQS
Compare And Swap
ABA解决方案
ABA
循环时间长 开销大
只能保证一个共享变量的原子操作
缺陷
CAS
volatile和synchronized关键字
使用wait()、notify()和notifyAll()时需要先对调用对象加锁
notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或notifyAll的线程释放锁之后,等待的线程 才有机会从wait()返回。
notify()方法将等待队列中的一个等待线程从等待队列 中移到同步队列中,而notifyAll()方法将等待队列中所有的线程全部移到同步队列,被移动的线程状态由WAITING变为BLOCKING .
从wait()方法返回的前提 是获得了调用对象的锁
等待/通知
Thread.join()
线程间通信
ThreadLocal
并发 基础
应用场景
CyclicBarrier
一个线程调用countDown方法happen-before,另外一个线程调用await方法。
CountDownLatch
CyclicBarrier和CountDownLatch的区别
使用场景
Semaphore
并发工具类
实现重进入
公平锁
非公平锁
ReentrantLock
ReentrantReadWriterlock
volatile实现机制
volatile的特性
volatile写-读的内存语义
volatile内存语义的实现
内存语义
volatile
NonfairSync
锁的内存语义
concurrent包的实现
Lock接口
等待队列
等待
通知
Condition的实现
Condition
LockSupport
锁
set(T):s设置一个值
分割任务
执行任务合并结果
Fork/Join的设计
Fork/Join
Disruptor并发框架
其他
线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信
共享内存
线程之间必须通过发送消息来显示进行通信
消息传递
线程通信
什么是HashMap
高并发下的HashMap
什么是ConcurrentHashMap
ConcurrentHashMap的结构
ConcurrentHashMap初始化
ConcurrentHashMap允许多个读并发进行?
ConcurrentHashMap的size操作
ConcurrentHashMap get操作
ConcurrentHashMap put操作
ConcurrentHashMap
1.使用阻塞算法
2.使用非阻塞算法
如何实现一个线程安全的队列?
入队列
出队列
ConcurrentLinkedQueue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
amp;nbsp;缓存系统的设计
定时任务调度
DelayQueue
SynchronousQueue
LinkedTransferQueue
LinkedBlockingDeque
java中的阻塞队列
CopyOnWriteArrayList
CopyOnWriteArraySet
CopyOnWrite 容器介绍
黑白名单
读多写少
优缺点
CopyOnWrite
并发集合
Execuror
AbortPolicy
CallerRunsPolicy
DiscardOldestPolicy
DiscardPolicy
RejectedExecutionHandler
corePoolSize
maximumPoolSize
keepAliveTime
TimeUnit
runnableTaskQueue
ThreadFactory
构造参数
FixedThreadPool
SingleThreadExecutor
CachedThreadPool
种类
ThreadPoolExecutor
Callable和Future
ScheduledExecutorService
合理配置线程池
线程池的监控
线程池
AtomicBoolean
AtomicInteger
AtomicLong
基本类型
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
数组
AtomicReference
AtomicReferenceArrayFieldUpdater
引用类型
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicStampedReference
原子更新字段类
使用循环CAS实现原子操作
java如何实现原子操作
原子操作
写一个变量之后,再读这个变量
写一个变量之后,再写 这个变量
读一个变量之后,再写 这个变量
数据依赖性
重排序对多线程的影响
重排序
数据竞争与顺序一致性
顺序一致性内存模型
同步程序的顺序一致性效果
未同步程序的执行特性
顺序一致性
定义
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;amp;nbsp;amp;nbsp; 1、程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen—before(时间上)后执行的操作。amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;2、管理锁定规则:一个unlock操作happen—before后面(时间上的先后顺序,下同)对同一个锁的lock操作。amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;amp;nbsp; 3、volatile变量规则:对一个volatile变量的写操作happen—before后面对该变量的读操作amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 4、线程启动规则:Thread对象的start()方法happen—before此线程的每一个动作。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 5、线程终止规则:线程的所有操作都happen—before对此线程的终止检测,可以通过Thread.join()方法结束、Thread.isAlive()的返回值等手段检测到线程已经终止执行。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;nbsp;6、线程中断规则:对线程interrupt()方法的调用happen—before发生于被中断线程的代码检测到中断时事件的发生。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; amp;nbsp; 7、对象终结规则:一个对象的初始化完成(构造函数执行结束)happen—before它的finalize()方法的开始。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 8、传递性:如果操作A happen—before操作B,amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;操作B happen—before操作C,那么可以得出amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;Aamp;nbsp;amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;happen—before操作C。amp;lt;/spanamp;gt;
规则
happens-beofre
as-if-serial
JMM的内存可见性保证
内存模型
synchronized原理
synchronized
java多线程并发编程技巧分享
0 条评论
回复 删除
下一页