CountDownLatch

说明

CountDownLatch是在java1.5被引入,使一个线程等待其他线程各自执行完毕后再执行。

CountDownLatch是通过共享锁实现的。在创建CountDownLatch中时,会传递一个int类型参数count,该参数是“锁计数器”的初始状态。
当某线程调用该CountDownLatch对象的await()方法时,该线程会等待“共享锁”可用时,
才能获取共享锁进而继续运行。而“共享锁”可用的条件,就是锁计数器的值为0!而锁计数器的初始值为count,
每当一个线程调用该CountDownLatch对象的countDown()方法时,锁计数器减1;直到锁计数器为0时,前面的等待线程才能继续运行!

使用场景

  • 让多个线程等待:比如模拟多线程并发
  • 让单个线程等待:等待其他线程都处理完后,再执行某个操作
Read More

ReentrantLock

概述

ReentrantLock是重入锁。它实现了Lock接口,是基于AQS(一种用于构建同步器的框架)构造出来的一种同步器。

与synchronized相比增加了一些高级功能, 主要有以下三项:等待可中断、可实现公平锁、锁可以绑定多个条件。

集合知识点总结


通过迭代器fail-fast属性,你明白了什么?

每次我们尝试获取下一个元素的时候,Iterator fail- fast属性检查当前集合结构里的任何改动。如果发现任何改动,它抛出 ConcurrentModificationException。
Collection中所有Iterator的实现都是按fail-fast来设计的(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类除外)


fail-fast与fail-safe有什么区别?

Read More