大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
CountDownLatch是并发容器JUC下的类,允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。
使用给定的计数初始化CountDownWatch。由于调用了countdown()方法,wait方法将一直阻塞,直到当前计数为零。之后,所有等待线程都被释放,任何随后的wait调用都会立即返回。这是一种一次性现象——计数无法重置。如果您需要重置计数的版本,请考虑使用cyclicBarrier。
CountDownLatch是一种通用的同步工具,可用于多种用途。用一个计数初始化的Countdownloatch用作一个简单的开/关闩锁。或:所有调用的线程都等待在入口等待,直到被调用的线程打开为止。countDown()。一个CountDownLatch初始化为N可以用来做一个线程等待,直到N线程完成一些动作,或某些动作已经完成N次。
Countdownloatch的一个有用属性是,它不要求调用countdown的线程在继续之前等待计数达到零, 它只是防止任何线程在所有线程都可以通过之前继续经过等待。
CountDownLatch 官方API
HttpClientUtil是自己写的一个发送http请求的工具类
public class CountDownLatchTest {
public static void main(String[] args) {
final long time = System.currentTimeMillis();
final String url = "http://localhost/user/";
int len = 10;
final CountDownLatch latch = new CountDownLatch(len);
for (int i = 0; i < len; i++) {
final int id = i;
new Thread(new Runnable() {
public void run() {
try{
Thread.sleep(1000 * id);
System.out.println("第" + id + "个请求已到位");
latch.countDown();
latch.await();
} catch (InterruptedException e){
e.printStackTrace();
}
HttpClientUtil.sendGet(url + id);
long usetime = System.currentTimeMillis() - time;
System.out.println("到第" + id + "个请求已用时:" + usetime / 1000 + "秒");
}
}).start();
}
}
}
主要使用两个方法
public void await()
除非线程被中断,否则导致当前线程等待锁存器倒计数到零。, 导致当前线程等待,直到锁存器倒计数至零,除非线程被中断。
如果当前计数为零,则此方法立即返回。
如果当前计数大于零,则当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态:, 如果当前计数大于零,则当前线程的线程调度目的就退出,一直处于休眠状态的两种情况之一发生:
由于countDown()方法的调用,计数达到零;要么
其他一些线程会中断当前线程。
如果当前线程:
在进入此方法时设置其中断状态;要么
在等待时被打断
然后抛出InterruptedException并清除当前线程的中断状态。
public void countDown()
减少锁存器的计数,如果计数达到零则释放所有等待的线程。
如果当前计数大于零,则递减。如果新计数为零,则重新启用所有等待线程以进行线程调度。
如果当前计数等于零,则没有任何反应。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234070.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...