Java 并发编程
more_try
此间乐,不思蜀!
展开
-
《Java 并发编程实战》信号量 Semaphore 摘抄
计数信号量用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者对容器施加边界。/** * @description: 可设置边界容量的阻塞容器 * @create: 2018-12-15 16:51 **/public class BoundeHashSet<T> { private final Set&...原创 2018-12-15 17:07:41 · 149 阅读 · 0 评论 -
倒计数锁存器 Countdown Latch 《Effective Java》摘抄
倒计数锁存器是一次性的障碍,允许一个或多个线程等待一个或多个其他线程来做某些事情。CountDownLatch的唯一构造器带有一个 int类型的参数,这个参数是指允许所有在等待的线程被处理之前,必须在锁存器上调用countDown方法的次数。//多个任务执行时间计时 public static long time(Executor executor,int concurrency,f...原创 2018-12-17 15:41:59 · 188 阅读 · 0 评论 -
延迟初始化的两种方式 《Effective Java》摘抄
对静态域使用延迟初始化 public class FieldType{ private static class FieldHolder{ static final FieldType field = computeFieldValue(); } static FieldType getField(){ ...原创 2018-12-17 17:19:13 · 247 阅读 · 1 评论 -
this引用逸出
逸出:某个不应被发布的对象被发布发布:使对象在作用域之外的代码中被使用。例如get()获得对象或者将new出的对象放到外部集合中。《Java并发编程实战》3-2节中提到this隐式逸出,并给出了示例代码:public class ThisEscape { public ThisEscape(EventSource source) { source.registerLi...原创 2019-02-01 16:51:02 · 591 阅读 · 0 评论 -
理解volatile的保证可见性与不保证原子性
可见性编译器重排序指令执行机制CPU只对寄存器中的数据进行计算,为了加快寄存器和内存的数据交换,会有一个缓存区,寄存器与缓存区交换速度更快。数据从缓存区写回内存中这个动作由系统决定。所以会存在某一数据被修改,却没有被立即同步到内存中,导致其他线程拿到的值是过期值。而加了volatile则相当于告诉计算机将这个值立即写回内存,对其他线程可见。不保证原子性volatile字段可以保证线程拿到...原创 2019-01-29 20:04:42 · 672 阅读 · 0 评论