比如有一个任务A,它要等到其它3任务完成才能执行,此时就可以用CountDownLatch来实现。...[img]
假设计数器的值为2,线程A调用await()方法之后,A线程就进入了等待状态,之后其它线程中执行countDown(),计数器就会-1,该操作线程继续执行,当计数器从2编程0,线程A继续执行...Semaphore和锁有点类似,都可以控制对某个资源的访问权限。
CountDownLatch和Semaphore通常和线程池配合使用。...Semaphore适合控制并发数,CountDownLatch比较适合保证线程执行完后再执行其他处理,因此模拟并发时,使用两者结合起来是最好的。...假设有这个的需求,读取几万个文件的数据到数据库中,由于文件读取是IO密集型任务,可以启动几十个线程并发读取,但是数据库连接数只有10个,这时就必须控制最多只有10个线程能够拿到数据库连接进行操作。