浅谈 Java 线程并发知识点
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本文主要对 Java 线程并发的知识点进行简单介绍具有很好的参考价值, 需要的朋友一起来看下吧
发布: 一个对象是使它能够被当前范围之外的代码所引用:
常见形式: 将对象的的引用存储到公共静态域; 非私有方法中返回引用; 发布内部类实例, 包含引用
逃逸: 在对象尚未准备好时就将其发布
不要让 this 引用在构造函数中逸出例, 在构造函数中启动线程, 线程会包含对象的引用
同步容器: 对容器的所有状态进行穿行访问, VectorHashtable,Cllections.synchronizedMap|List
并发容器: ConcurrentHashMap,CopyOnWriteArrayList,ConcurrentLinkedQueueBlockingQueue
list 随机访问特性的优势
Blocking 增加了可阻塞的 get set 操作
ConcurrentHashMap: 分离锁, 为并发访问带来的高的吞吐量, 同时几乎没有损失单个线程的访问性能返回弱一致性的迭代器
迭代器的弱一致性, 在迭代器生成以后会检测容器的修改变化
并发容器 size(), isEmpty() 弱化, 返回近似结果
CopyOnWriteArrayList: 每次修改容器时复制, 适用迭代需求大于修改需求情况
生产者消费者模式, 运用有界阻塞队列解耦生产者和消费者的代码
Executor 任务执行框架, 实现了生产者消费者模式
SynchronousQueue:put 等待消费者可用, take 等待生产者可用, 适用于消费者充足的情景
双端队列 (deque) 关联于窃取工作模式(work stealing), 区别于生产者消费者模式中所有消费者共享一个工作队列, 工作窃取模式每一个消费者都有自己的双端队列, 如果一个消费者完成自己的全部工作, 就可以偷取其它消费者队列队尾的任务
工作窃取模式适用于当运行到一个任务的某一个单元时, 可能会识别出更多的任务, 如遍历文件
当一个方法能够抛出 InterruptedException 时, 说明它是可阻塞方法抛出或捕获 InterruptedException
Synchronizer: 同步者 ---semaphorebarrierlatch, 封装状态, 决定线程在此状态下的行为(通过或阻塞), 提供操控状态的方法, 高效的等待同步者进入期望的状态
latch 闭锁: 延迟线程进度直到线程到达一个终点状态, 像一个一次性开关可以用来确保特定活动直到其它活动完成才发生
例如:
确保一个计算不会被执行, 直到需要的资源都被初始化
确保一个服务不会被开始, 直到依赖的其它服务已经开始
等待, 直到活动的所有部分都为继续处理做好准备
FutureTask 可以作为闭锁, 抽象的可携带结果的计算, 通过 callable 实现 Future.get 依赖于任务的执行状态, 任务运行完成则返回结果, 否则一直等待,
Executor 框架利用 FutureTask 完成异步任务
semapher 信号量: 用来控制能够同时访问某特定资源的活动数量或同时执行某一给定操作的数量, 资源池, 容器边界
barrier 关卡: 类似于闭锁, 区别所有的线程必须同时到达关卡, 才能继续处理, 闭锁等待的是时间, 关卡等待的是其它线程, 重复使用通过关卡, await 会为每一个线程返回唯一的到达索引号, 可以用它来选举产生一个领导, 在下一次迭代中承担一些特殊任务
Exchanger 一种关卡的形式
来源: http://www.phperz.com/article/18/0206/359126.html