【文档说明】高效并发:Java并发体系课件.pptx,共(56)页,1.175 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45216.html
以下为本文档部分文字说明:
Java并发体系演讲人2021-12-0401.02.03.04.目录并发特性并发工具Java内存模型(JMM)多线程并发特性01并发特性原子性:一个或多个操作,必须全部执行成功01有序性:禁止代码指令重排序,按照代码顺序执行02可见性:多线程间变量修改可见03并发工具
02并发工具ABCD锁和工具线程池并发集合atomic并发工具锁和工具AAQSBReentrantLockC读写锁DsemaphoreECountdownLatchFCyclicBarrier锁和工具Exchanger并发工具AQS原理数据结构CLH节点增加和移出优点解决了子类实
现同步器的大量细节问题,如获取同步状态、FIFO同步队列采用模板模式,AQS实现大量通用方法,子类通过继承方式实现其抽象方法来管理同步状态支持独占式和共享式同步状态的获取与释放当有线程获取锁了,其他在此获取时需要阻塞,当线程释放锁后,AQS负责唤醒线程支持多个条件变量,支持等
待唤醒机制ReentrantLock可重入锁,递归无阻塞的同步机制01比synchronized更强大、灵活的锁机制,可减少死锁发生的概率02分公平锁和非公平锁03底层采用AQS实现,通过内部Sync集成AQS04ReentrantRead
WriteLock读锁(共享锁)、写锁(排他锁)支持公平、非公平性,可重入和锁降级锁降级:遵循获取写锁、获取读锁在释放写锁的次序,写锁能降级为读锁StampedLock乐观锁,读写时配合戳一起使用读写锁semaphore信号量
,现在同事访问共享资源的线程数CountdownLatch倒计时锁,允许一个或多个线程等待其他线程完成操作CyclicBarrier循环栅栏,可循环使用的同步线程屏障Exchanger线程协作工具,在这个同步点,两个线程交换数据并发工具线程池优势01Executor0
3线程池的选择02Future04优势降低资源消耗1提高响应速度2提高线程可管理性3提供延时定时线程池4线程池的选择01020304CPU密集型任务,可选择尽量少的线程数,如CPU核心数+1IO密集型任务,可选择尽可能多的线程,如CPU核心数*2混合型任务,如
果执行时间相差不大,可进行拆分优先级不同的任务,可选择优先队列PriorityBlockingQueueThreadPoolExecutor核心属性01核心方法02线程池分类03核心属性corePoolS
izemaximumPoolSizekeepAliveTimeTimeUnitunitBlockingQueue<Runnable>workQueueThreadFactorythreadFactoryRej
ectedExecutionHandlerhandlerThreadPoolExecutor核心方法exec():提交不需要返回自的任务submit():提交返回Future对象任务shutdown():线程池置为SHUTDOWN状态,并等待线程执行interru
pt()方法shutdownNow():线程池置为STOP状态,尝试暂停所有任务ThreadPoolExecutor线程池分类newCacheThreadPool()newFixedThreadPool(intn)newScheduledThreadPool(in
tn)newSingleThreadExecutor()ThreadPoolExecutorScheduledThreadPoolExecutorExecutorRunnableFuture(接口)FutureTaskFutureRu
nnabelSchedualedFuture(接口)SchedualedFutureTaskSchedualFuture(接口)FutureCompleteFutureFutureForkJoinTask并发工具并发集合1234ConcurrentHashMapBlockingQue
ueConcurrentLinkedQueueCopyOnWriteArrayListConcurrentHashMapJDK8数据结构:数组+链表+红黑树加锁位置:锁定每个位置的头节点加入元素位置:尾部
扩容后计算下标:originalIndex或originalIndex+oldSizeJDK7数据结构:数组加链表加锁位置:锁定Segment加入元素位置:头部,在resize中的rehash过程中,并发环境下可能形成死链扩容后计算下标:hash&
newSizeJava内存模型(JMM)03Java内存模型(JMM)内存模型并发方案Java内存模型(JMM)内存模型重排序顺序一致性happens-beforeas-if-serial内存模型01重
排序02顺序一致性03happens-before04as-if-serialJava内存模型(JMM)并发方案volatile01synchronized02final域03CAS04作用保证内存可见性
禁止指令重排序保证单读/写原子性(32位),符合操作不保证,如i++原理内存屏障happens-beforevolatilesynchronized1Java对象头2monitor普通方法:锁住当前this对象静态方法:锁住当前类对象方法块:锁住指定对象3基本用法并发方案f
inal域CBEADfinal类不能被子类集成final域不能被改变,底层有写屏障final可以提高性能,JVM会缓存final变量(编译时静态绑定)final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。使用
final关键字,JVM会对方法、变量及类进行优化。CAS原理问题ABA问题开销问题只能保证一个共享变量的原子操作多线程04多线程123456CPU核、进程和线程CPU时间轮片机制并发和并行共享内存与CPU缓存高并发编程的好处和问题线程实现多线程锁优化线程创建方式线程分类线程状态调度方式多线
程共享内存与CPU缓存内存一致性MESI协议多线程线程实现阻塞同步01非阻塞同步02无同步方案03阻塞同步临界区阻塞同步锁A可重入锁B公平锁/非公平锁C独享锁/共享锁D互斥锁/读写锁E乐观锁/悲观锁F自旋锁锁偏向锁/轻量级锁/重量级锁阻塞同步锁带来的问题死锁互斥使用占有且等
待不可抢占循环等待活锁饥饿多线程线程分类内核线程01用户线程02守护线程03多线程线程状态新建可运行无期限等待期限等待阻塞结束无期限等待LockSuport.park()方法无Timeout参数的Thread.join()方法无Timeout参数的wait()方法期限等待1sleep()方法
2有Timeout参数的wait()方法3有Timeout参数的Thread.join()方法4LockSuport.parkNanos()方法5LockSuport.parkUntil()方法多线程调度方式协同式抢占式多线程锁优化自旋锁自
适应自旋锁锁消除锁粗化偏向锁轻量级锁锁优化重量级锁多线程多线程线程创建方式集成Thread类01实现Runnable接口02通过Callable和Future创建线程03感谢聆听