多线程之CountDownLatch类详解

java-经验王 Java经验 发布时间:2022-04-14 09:29:30 阅读数:3011 1
下文笔者讲述多线程常使用的CountDownLatch类的简介说明,如下所示:
日常开发中,我们使用最多的for循环,进行遍历操作时,
会导致效率低下,那么如何才能提高效率呢?
下文笔者讲述一种并发执行,使接口的效率更高,如下所示:
------------------------------------------------------------------
实现思路:
   使用CountDownLatch类进行相应的处理

CountDownLatch类的作用

CountDownLatch是java.util.concurrent包下的一个类
  它允许一个或多个线程等待其他的线程执行到某一操作
CountDownLatch是通过一个计数器来实现的
   计数器的初始值就是线程的数量,每当一个线程完成自己的任务后
   计数器的值就会减一
   当计数器值到达0后
   表示所有线程都已经完成自己的任务
   然后等待的线程便可以恢复执行的任务

CountDownLatch中常见的API

 
构造函数
    public CountDownLatch(int count) {
        if (count < 0) throw new IllegalArgumentException("count < 0");
        this.sync = new Sync(count);
    }
count实际上就是闭锁等待的线程数量,这个值只能设置一次,不能重复设置这个计数值。
阻塞方法:await
    public void await() throws InterruptedException {
        sync.acquireSharedInterruptibly(1);
    }
CountDownLatch的第一次交互是主线程等待其他线程
 主线程必须在启动其他线程后立即调用await()方法来阻塞主线程
直到其他线程完成各自的任务。
计数器减一countDown()
public void countDown() {
        sync.releaseShared(1);
    }
其他N个线程通过countDown方法完成调用
 没调用一次该方法
 构造函数中的初始的count值就会-1
 当count值为0时,主线程就能通过await()方法
恢复执行自己的任务
例:
package com.java265.other;
import java.util.concurrent.CountDownLatch;
public class Test16 {
	/**
	 * java265.com 示例程序
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		final CountDownLatch countDownLatch = new CountDownLatch(3);
		for (int i = 0; i < 3; i++) {
			new Thread(new Runnable() {

				@Override
				public void run() {

					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + " 运行!");
					countDownLatch.countDown();
				}
			}).start();
		}

		countDownLatch.await();
		System.out.println("主线程运行完毕!");
	}
}
------运行以上代码,将输出以下信息------
Thread-0 运行!
Thread-2 运行!
Thread-1 运行!
主线程运行完毕!

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202204/16498997952862.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者