2017年12月13日
摘要: Exchanger是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换 示例: 输出: 阅读全文
posted @ 2017-12-13 21:43 飞奔的菜鸟 阅读(188) 评论(0) 推荐(0) 编辑
摘要: Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。 代码示例: 代码中,虽然有30个线程在执行,但是只允许10个并发执行。 阅读全文
posted @ 2017-12-13 21:22 飞奔的菜鸟 阅读(540) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch的计数器只能使用1次,而CyclicBarrier的计数器可以使用reset()方法重置。所以CyclicBarrier能处理更为复杂的业务场景。例如,如果发生计算错误,可以重置计数器,并让线程重新执行一次。 阅读全文
posted @ 2017-12-13 21:12 飞奔的菜鸟 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 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) 编辑