2020年9月20日

Java 多线程 - Exchange

摘要: Exchange Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger 用于进行 线程间的数据交换。它􏰀供一个同步点,在这个同步点,两个线程可以交换彼此 的数据。这两个线程通过 exchange 方法交换数据。 如果第一个线程先执行 exchange()方法,它会一直等待第 阅读全文

posted @ 2020-09-20 20:44 frank_cui 阅读(427) 评论(0) 推荐(0)

Java 多线程 - Semaphore

摘要: 总结 1-Semaphore 的构造方法 Semaphore(int permits)接受一个整型的数字, 表示可用的许可证数量 2-线程使用 Semaphore 的 acquire()方法获取一个许可证,使用完之后调用 release()方法归还许可证。还可以用 tryAcquire()方法尝试获 阅读全文

posted @ 2020-09-20 20:38 frank_cui 阅读(191) 评论(0) 推荐(0)

Java 多线程 - CountDownLatch & CyclicBarrier

摘要: CountDownLatch VS CyclicBarrier CountDownLatch 的计数器只能使用一次,而 CyclicBarrier 的计数器可以反复使用 在控制多个线程同时运行上,CountDownLatch 可以不限线程数量,而 CyclicBarrier 是固定线程数。 Cycl 阅读全文

posted @ 2020-09-20 20:27 frank_cui 阅读(143) 评论(0) 推荐(0)

Java 多线程 - Fork-Join

摘要: Fork-Join原理 任务fork,结果join 工作密取 即当前线程的 Task 已经全被执行完毕,则自动取到其他线程的 Task 池中取 出 Task 继续执行。 ForkJoinPool 中维护着多个线程(一般为 CPU 核数)在不断地执行 Task,每 个线程除了执行自己职务内的 Task 阅读全文

posted @ 2020-09-20 16:38 frank_cui 阅读(418) 评论(0) 推荐(0)

Java 多线程 - LongAdder 与 AtomicLong有什么区别

摘要: 总结 AtomicLong AtomicLong 是基于 CAS 方式自旋更新的。 唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。 LongAdder LongAdd 阅读全文

posted @ 2020-09-20 15:07 frank_cui 阅读(246) 评论(0) 推荐(0)

Java 多线程 - 原子操作CAS

摘要: 什么是原子操作?如何实现原子操作? 假定有两个操作 A 和 B,如果从执行 A 的线程来看,当另一个线程执行 B 时, 要么将 B 全部执行完,要么完全不执行 B,那么 A 和 B 对彼此来说是原子的。 实现原子操作可以使用锁,锁机制,满足基本的需求是没有问题的了,但是 有的时候我们的需求并非这么简 阅读全文

posted @ 2020-09-20 14:30 frank_cui 阅读(224) 评论(0) 推荐(0)

Java 多线程 - Lock接口,Condition接口 标准用法

摘要: Lock 接口 Lock 标准用法 在 finally 块中释放锁,目的是保证在获取到锁之后,最终能够被释放。 不要将获取锁的过程写在 try 块中,因为如果在获取锁(自定义锁的实现) 时发生了异常,异常抛出的同时,也会导致锁无故释放。 Lock 常用 API public interface Lo 阅读全文

posted @ 2020-09-20 12:40 frank_cui 阅读(227) 评论(0) 推荐(0)

导航

levels of contents