博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
思维导图:java并发编程工具包
阅读量:4281 次
发布时间:2019-05-27

本文共 3841 字,大约阅读时间需要 12 分钟。

思维导图:java并发编程工具包

在这里插入图片描述

附:文本结构

并发编程工具包(java.util.concurrent)	锁		locks			ReentrantReadWriteLock				实现了读写锁(ReadWriteLock)					ReadLock					WriteLock				实现了可重入锁(ReentrantLock)				不提供加锁服务,只提供锁					获取锁的方法						ReentrantReadWriteLock.readLock()						ReentrantReadWriteLock.writeLock()			StampedLock				三个模式					独享写					悲观读					乐观读			LockSupport				是一个线程工具类				静态工具类				所有方法都是静态的				方法					park						用于阻塞当前线程					unpark						用于唤醒被阻塞的线程	原子变量		atomic			AtomicInteger				get()					获得当前值				getAndXxx()					获得操作前的值并进行Xxx操作				XxxAndGet()					Xxx操作并获得操作后的值				compareAndSet(expect, update)					和期望值相等则更新为update值,并返回true					不等则不更新					并且返回true/false			AtomicReference				让引用到处可见,并保持原子性			AtomicLong			AtomicBoolean			AtomicArray			DoubleAdder				分头计算,最后汇总,参考mapreduce思想			LongAccumulator				比LongAdder功能强大				可自定义计算规则	并发框架		Executor			三大件				工作单元					Runnable						不关注执行结果(不返回)					Callable						关注执行结果(有返回)				工作单元执行					Executor						一个接口,定义了execute方法					ExecutorService						Executor的子接口,定义了一系列线程池的基本操作接口							execute(Runnable)							submit(Callable or Runnable)							shutdown								关闭新的外部任务提交							shutdownNow								尝试中断正在执行的所有任务							isTerminated								是否所有任务已经关闭							isShutdown								是否该ExecutorService已被关闭							invokeAll(List
) 有很多实现子类 工作单元执行结果 Future 定义了对任务执行结果的取消、状态查询、结果获取方法 cancel isCanceled isDone get 是接口 FutureTask Future的唯一实现类 其他 Executors 用于快速创建各类线程池 ScheduledExecutorService 定长的线程池 支持定时或周期性执行 FixedExecutorService 定长的线程池 防止线程滥用 CachedExecutorService 可灵活伸缩线程数 没有空闲线程回收,则创建新线程,有则回收再利用 SingleExecutorService 单线程的线程池 可指定执行顺序 FIFO LIFO 优先级 ForkJoin 三大件 执行任务的线程池 ForkJoinPool 方法 ForkJoinTask
= pool.submit(forkJoinTask) 创建方式 new ForkJoinPool() 使用可用的处理器数量 ForkJoinPool.commonPool() 最大化使用全局系统资源 线程池中具体执行任务的线程 ForkJoinWorkerThread 由ForkJoinPool内部自行创建维护,不需显式地使用此类 运行在线程池中的任务 ForkJoinTask 抽象类 定义了主要操作接口 fork join invoke 主要实现 RecursiveAction 不关心结果 RecursiveTask 关心结果 并发容器 collections ConcurrentHashMap 对HashMap的升级 采用分段锁,提高了并发度 相比synchronize HashMap的全局加锁更加高效 读写都加锁 在多线程中使用可不用再自己实现任何并发控制 CopyOnWriteArrayList 适合读多写少的场景 拷贝写列表 写数据时,先拷贝一个副本,再写入副本 多份写同时进行,只保留一个结果,因此有一定风险 读不加锁 提高读效率 LinkedBlockingQueue 阻塞队列 方法 插入操作 add 立即返回 成功=true 无空间时则抛出:illegalStateException offer 立即返回 成功=true 无空间时=false 可指定超时时间,超时=false put 无空间时阻塞等待,直至插入成功 取出操作 poll 可指定超时时间 获取并移除队首元素 超时无元素返回则返回null take 获取并移除队首元素,没有元素则等待 ConcurrentLinkQueue ConcurrentSkipListMap 同步工具 tools Semaphore 信号量(许可证管理工具) 用于限制同时访问资源的线程数 方法 acquire 申请许可 可定义申请数量 阻塞方法 申请不到时会一直阻塞,因此申请数量不能大于许可证总数 tryAcquire 申请许可,并立刻返回结果 不阻塞 可定义申请数量 可定义超时时间 release 释放许可 和Synchronize的区别 前者可控制一个或多个并发 许可数为1的时候,两者无区别 CountDownLatch 同步计数器 可用于监听多线程的执行情况 可用于分头处理任务,最后总结处理 方法 countDown 计数器减一 await 阻塞到计数为0,才被唤醒执行 也可设置超时时间,到时间了计数不为0也可以继续往下执行 CyclicBarrier 循环栅栏(循环屏障) 类似同步计数器 所有线程都释放了对这个屏障的使用后,可重复使用这个屏障 方法 CyclicBarrier (int parties) 仅指定并发数,不指定动作 CyclicBarrier (int parties, Runnable barrierAction) 指定次数达成后,执行某个指定动作 await 等待指定次数达成后才被唤醒 也可指定超时时间 Phaser 移相器 更倾向重用的循环栅栏 方法 register 注册一个同步者 arriveAndAwaitAdvance 到达并提前等待 arriveAndDeregister 到达并取消注册 getRegisteredParties 获得注册的同步者数量 forceTermination 强制终止phase,phase对象不再可用 Exchanger 交换者 一对线程到达同步点时,可进行数据交换 方法 Object v2 = exchange(Object v1) 交出V1,得到对方的v2 一手交钱一手交货 可定义超时时间

转载地址:http://inbgi.baihongyu.com/

你可能感兴趣的文章
数据不够怎么训练深度学习模型?不妨试试迁移学习
查看>>
tomcat结合nginx使用小结
查看>>
数据库结构演变
查看>>
国内主要视频网站的网页视频嵌入方式
查看>>
为什么要使用 99+,记一次 sql 优化(消息数量显示优化)
查看>>
去中心化的三个维度
查看>>
一个经过优化的微服务架构案例
查看>>
对一个准程序员的忠告
查看>>
团队开发中预防Bug的一些经验
查看>>
花式破解人脸识别技术的5种方法
查看>>
使用微软人脸API实现人脸识别(java的URL方式)
查看>>
人脸识别几个解决方案分析与测评
查看>>
如何在自定义Listener(监听器)中使用Spring容器管理的bean
查看>>
运维DBA规范(4大纪律9项注意)
查看>>
从人脸识别到机器翻译:52个有用的机器学习和预测API
查看>>
浅谈Web客户端追踪
查看>>
程序员简历修养
查看>>
ThreadPoolExecutor 判断多线程执行完成
查看>>
神经网络通俗指南:一文看懂神经网络工作原理
查看>>
Windows共享权限和相关管理
查看>>