摘要: 转载自:https://segmentfault.com/a/1190000015831791?utm_source=tag-newest#articleHeader0 就是以原子方式更新对象引用。 可以看到它持有一个对象的引用,-value,用volatile修饰,并通过unsafe类来操作该引用 阅读全文
posted @ 2019-10-07 23:22 泥古拉斯赵四 阅读(5792) 评论(0) 推荐(0) 编辑
摘要: 是另一种栅栏,它是一种两方two-party栅栏,各方在栅栏位置上交换数据。 当两方执行不对称的操作时,exchanger会非常有用。 场景例子: 当一个线程向缓冲区写入数据,而另一个线程从缓冲区中读取数据。这些线程可以使用Exchanger来汇合,并将满的缓冲区与空的缓冲区交换。当两个线程通过Ex 阅读全文
posted @ 2019-10-05 23:31 泥古拉斯赵四 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 栅栏类似于闭锁,它能阻塞一组线程直到某个事件发生。 栅栏与闭锁的关键区别 CyclicBarrier和CountDownLatch的区别 在于,所有线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。 我自己写了几个例子,加上自己的理解总结出几个不同。 1. Cycli 阅读全文
posted @ 2019-10-04 23:54 泥古拉斯赵四 阅读(1075) 评论(1) 推荐(0) 编辑
摘要: Semaphore用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者对容器施加边界。 Semaphore可以用于实现资源池。例如数据库连接池。我们可以构造一个固定长度的资源池,当池为空时,请求资源将会失败,但你真正希望看到的行为是阻塞而不 阅读全文
posted @ 2019-10-01 22:33 泥古拉斯赵四 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 参考自: https://www.cnblogs.com/linghu-java/p/8991824.html Future接口代表异步计算的结果,通过future提供的方法可以查看异步计算是否执行完成,或者等待执行结果并获取执行结果,同时还可以取消执行。 futureTask表示的计算 是通过ca 阅读全文
posted @ 2019-09-29 13:40 泥古拉斯赵四 阅读(204) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch是一种灵活的闭锁实现。它可以使一个或多个线程等待一组事件的发生。 闭锁状态包括一个计数器,该计数器被初始化为一个正数,表示需要等待的事件的数量。countDown()方法递减计数器,表示有一个事件已经发生,而await方法等待计数器达到零,表示所有需要等待的事件都已经发生 阅读全文
posted @ 2019-09-28 14:01 泥古拉斯赵四 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 简单的实现生产者消费者模式。 阅读全文
posted @ 2019-09-25 21:27 泥古拉斯赵四 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 因为在看ArrayBlockIngQueue 发现问题。其中put,take,offer(e,time,unit), poll(time,unit)是阻塞的方法,offer(e),poll(),是非阻塞方法, 其中offer(e),offer(e,timeout,unit)两个方法中的获取锁的方法不 阅读全文
posted @ 2019-09-24 22:15 泥古拉斯赵四 阅读(1404) 评论(0) 推荐(0) 编辑
摘要: blockingQueue 阻塞队列,一般用于消费者生产者模式。 就是通过ReentrantLock和condition实现的阻塞, 在我上一篇文章中简单用condition实现了消费者生产者模式。 https://www.cnblogs.com/liumy/p/11564375.html 本文的j 阅读全文
posted @ 2019-09-24 21:34 泥古拉斯赵四 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 上一篇文章介绍了condition的使用方法 https://www.cnblogs.com/liumy/p/11563772.html 这一篇文章介绍如何用condition来实现一个简单的阻塞队列 消费者 生产者模式。 消费者 生产者模式就是 生产者生产某些对象,消费者来消费这些对象。其中用对象 阅读全文
posted @ 2019-09-21 19:55 泥古拉斯赵四 阅读(491) 评论(0) 推荐(0) 编辑