2017年12月13日
摘要: CyclicBarrier就是可循环使用的屏障。它要做的事情是,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。 CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程的数量 阅读全文
posted @ 2017-12-13 21:07 飞奔的菜鸟 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 线程池解决创建大量线程的问题 3 */ 4 interface ThreadPool{ 5 //执行一个Job,这个Job需要实现Runnable 6 void execute(Job job); 7 //关闭线程 8 void shutDown(); 9 //增加工作线程 10 void ad... 阅读全文
posted @ 2017-12-13 16:48 飞奔的菜鸟 阅读(1416) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch允许一个或多个线程等待其他线程完成操作。 CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待n个节点完成,就传入n。 注意:CountDownLatch不可能重新初始化或者修改CountDownLatch对象的内部的计数器的值 简单示例 阅读全文
posted @ 2017-12-13 16:45 飞奔的菜鸟 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 输出: 注意:old必须是volatile的 阅读全文
posted @ 2017-12-13 16:24 飞奔的菜鸟 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 结果: 阅读全文
posted @ 2017-12-13 16:13 飞奔的菜鸟 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 输出: 需要注意的是,数组value通过构造方法传递进去,然后AtomicIntegerArray会将当前数组赋值一份,所以当AtomicIntegerArray对内部的数组元素进行修改时,不会影响传入的数组 阅读全文
posted @ 2017-12-13 15:56 飞奔的菜鸟 阅读(118) 评论(0) 推荐(0) 编辑
  2017年12月12日
摘要: Fork就是把大任务切分为若干子任务并行执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。 要使用ForkJoin框架,必须首先创建ForkJoin任务。它提供在任务中执行fork()和join()操作的机制。 Fork/Join框架提供了以下两个子类: 1:RecursiveA 阅读全文
posted @ 2017-12-12 22:42 飞奔的菜鸟 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和溢出方法。 支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的过程,直到队列不满。 支持阻塞的移除方法:当队列空时,获取元素的线程会等待队列变为非空。 常用于生产者-消费者场景。 7个阻塞队列: A 阅读全文
posted @ 2017-12-12 21:54 飞奔的菜鸟 阅读(1142) 评论(0) 推荐(1) 编辑
摘要: ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。 ConcurrentLinkedQueue由head节点和tail节点组成,初始时,he 阅读全文
posted @ 2017-12-12 21:29 飞奔的菜鸟 阅读(249) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap是线程安全且高效的HashMap ConcurrentHashMap使用分段锁技术课有效提升并发访问率 ConcurrentHashMap的锁分段技术:首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一段数据的时候,其他段的数据也能被 阅读全文
posted @ 2017-12-12 21:03 飞奔的菜鸟 阅读(177) 评论(0) 推荐(0) 编辑