AQS—CountDownLatch

      CountDownLatch类介绍

        CountDownLatch是一个同步辅助类,通过它可以完成类似于阻塞当前线程功能,换句话说,一个线程或多个线程一直等待,直到其它线程执行的操作完成。CountDownLatch用了一个给定的计数器来进行初始化,该计数器的操作是原子操作,就是同时只能有一个线程去操作该计数器。调用该类的await()方法的线程会一直处于阻塞状态,直到其它线程调用countDown()这个方法,使当前计数器的值变为0。每次调用countDown()方法时,计数器的值会减1,当计数器的值减到0的时候,所有因调用await()方法而处于等待状态的线程就会继续往下执行,这种操作只会出现一次,因为这个计数器的值是不能被重置的。

      使用场景分析

        在某些业务场景中,程序执行需要等待某个条件完成后才能继续执行后续的操作。典型的应用,比如说并行计算,当某个处理的运算量很大时,可以将该运算任务拆分成多个子任务,等待所有的子任务都完成之后,父任务再拿到所有子任务的运算结果进行汇总。

CountDownLatch使用举例:

package com.yuxing.springbootdemo.juc;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class CountDownLatchExample {
	
	private static int threadCount = 200;
	
	public static void main(String[] args) throws InterruptedException {
		ExecutorService exec = Executors.newCachedThreadPool();
		final CountDownLatch countDownLatch = new CountDownLatch(threadCount);
		for(int i = 0;i < threadCount;i++){
			final int threadNum = i;
			exec.execute(() -> {
				try {
					test(threadNum);
				} catch (InterruptedException e) {
					log.error("exception", e);
				}finally {
					countDownLatch.countDown();
				}
			});
		}
		countDownLatch.await();
		log.info("finish");
		exec.shutdown();
	}
	
	private static void test(int threadNum) throws InterruptedException {
		Thread.sleep(100);
		log.info("{}", threadNum);
		Thread.sleep(100);
	}
}

运行结果:

20:09:37.464 [pool-1-thread-159] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 158
20:09:37.480 [pool-1-thread-74] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 73
20:09:37.480 [pool-1-thread-37] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 36
20:09:37.480 [pool-1-thread-20] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 19
20:09:37.480 [pool-1-thread-12] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 11
20:09:37.480 [pool-1-thread-40] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 39
20:09:37.480 [pool-1-thread-33] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 32
20:09:37.479 [pool-1-thread-31] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 30
20:09:37.480 [pool-1-thread-21] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 20
20:09:37.480 [pool-1-thread-8] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 7
20:09:37.480 [pool-1-thread-38] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 37
20:09:37.480 [pool-1-thread-32] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 31
20:09:37.480 [pool-1-thread-34] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 33
20:09:37.480 [pool-1-thread-22] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 21
20:09:37.480 [pool-1-thread-35] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 34
20:09:37.479 [pool-1-thread-28] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 27
20:09:37.480 [pool-1-thread-9] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 8
20:09:37.480 [pool-1-thread-39] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 38
20:09:37.480 [pool-1-thread-30] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 29
20:09:37.479 [pool-1-thread-3] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 2
20:09:37.480 [pool-1-thread-36] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 35
20:09:37.480 [pool-1-thread-7] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 6
20:09:37.479 [pool-1-thread-19] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 18
20:09:37.479 [pool-1-thread-29] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 28
20:09:37.479 [pool-1-thread-18] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 17
20:09:37.479 [pool-1-thread-25] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 24
20:09:37.479 [pool-1-thread-27] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 26
20:09:37.479 [pool-1-thread-23] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 22
20:09:37.479 [pool-1-thread-17] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 16
20:09:37.479 [pool-1-thread-16] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 15
20:09:37.479 [pool-1-thread-24] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 23
20:09:37.479 [pool-1-thread-5] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 4
20:09:37.479 [pool-1-thread-14] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 13
20:09:37.479 [pool-1-thread-2] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 1
20:09:37.479 [pool-1-thread-15] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 14
20:09:37.479 [pool-1-thread-10] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 9
20:09:37.479 [pool-1-thread-4] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 3
20:09:37.479 [pool-1-thread-11] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 10
20:09:37.479 [pool-1-thread-6] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 5
20:09:37.479 [pool-1-thread-1] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 0
20:09:37.479 [pool-1-thread-13] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 12
20:09:37.479 [pool-1-thread-93] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 92
20:09:37.479 [pool-1-thread-94] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 93
20:09:37.479 [pool-1-thread-96] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 95
20:09:37.479 [pool-1-thread-95] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 94
20:09:37.479 [pool-1-thread-110] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 109
20:09:37.479 [pool-1-thread-97] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 96
20:09:37.479 [pool-1-thread-108] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 107
20:09:37.479 [pool-1-thread-57] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 56
20:09:37.479 [pool-1-thread-99] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 98
20:09:37.479 [pool-1-thread-54] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 53
20:09:37.479 [pool-1-thread-98] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 97
20:09:37.475 [pool-1-thread-100] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 99
20:09:37.475 [pool-1-thread-102] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 101
20:09:37.475 [pool-1-thread-103] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 102
20:09:37.475 [pool-1-thread-101] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 100
20:09:37.475 [pool-1-thread-104] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 103
20:09:37.475 [pool-1-thread-109] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 108
20:09:37.475 [pool-1-thread-105] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 104
20:09:37.475 [pool-1-thread-106] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 105
20:09:37.475 [pool-1-thread-107] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 106
20:09:37.464 [pool-1-thread-164] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 163
20:09:37.475 [pool-1-thread-77] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 76
20:09:37.475 [pool-1-thread-76] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 75
20:09:37.467 [pool-1-thread-157] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 156
20:09:37.475 [pool-1-thread-78] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 77
20:09:37.467 [pool-1-thread-126] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 125
20:09:37.467 [pool-1-thread-124] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 123
20:09:37.475 [pool-1-thread-79] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 78
20:09:37.467 [pool-1-thread-182] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 181
20:09:37.475 [pool-1-thread-80] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 79
20:09:37.467 [pool-1-thread-125] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 124
20:09:37.475 [pool-1-thread-81] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 80
20:09:37.475 [pool-1-thread-82] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 81
20:09:37.464 [pool-1-thread-179] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 178
20:09:37.467 [pool-1-thread-119] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 118
20:09:37.475 [pool-1-thread-84] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 83
20:09:37.475 [pool-1-thread-83] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 82
20:09:37.464 [pool-1-thread-120] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 119
20:09:37.475 [pool-1-thread-87] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 86
20:09:37.467 [pool-1-thread-181] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 180
20:09:37.475 [pool-1-thread-86] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 85
20:09:37.467 [pool-1-thread-122] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 121
20:09:37.475 [pool-1-thread-85] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 84
20:09:37.475 [pool-1-thread-88] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 87
20:09:37.468 [pool-1-thread-117] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 116
20:09:37.468 [pool-1-thread-184] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 183
20:09:37.475 [pool-1-thread-89] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 88
20:09:37.475 [pool-1-thread-91] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 90
20:09:37.464 [pool-1-thread-144] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 143
20:09:37.468 [pool-1-thread-121] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 120
20:09:37.475 [pool-1-thread-92] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 91
20:09:37.468 [pool-1-thread-123] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 122
20:09:37.468 [pool-1-thread-118] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 117
20:09:37.475 [pool-1-thread-90] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 89
20:09:37.470 [pool-1-thread-138] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 137
20:09:37.475 [pool-1-thread-59] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 58
20:09:37.468 [pool-1-thread-132] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 131
20:09:37.468 [pool-1-thread-183] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 182
20:09:37.475 [pool-1-thread-60] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 59
20:09:37.464 [pool-1-thread-180] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 179
20:09:37.474 [pool-1-thread-137] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 136
20:09:37.475 [pool-1-thread-61] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 60
20:09:37.468 [pool-1-thread-115] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 114
20:09:37.475 [pool-1-thread-62] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 61
20:09:37.470 [pool-1-thread-146] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 145
20:09:37.468 [pool-1-thread-193] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 192
20:09:37.468 [pool-1-thread-197] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 196
20:09:37.468 [pool-1-thread-56] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 55
20:09:37.475 [pool-1-thread-63] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 62
20:09:37.464 [pool-1-thread-171] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 170
20:09:37.468 [pool-1-thread-153] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 152
20:09:37.475 [pool-1-thread-64] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 63
20:09:37.475 [pool-1-thread-66] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 65
20:09:37.470 [pool-1-thread-143] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 142
20:09:37.468 [pool-1-thread-116] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 115
20:09:37.475 [pool-1-thread-65] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 64
20:09:37.464 [pool-1-thread-163] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 162
20:09:37.468 [pool-1-thread-58] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 57
20:09:37.475 [pool-1-thread-67] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 66
20:09:37.464 [pool-1-thread-151] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 150
20:09:37.468 [pool-1-thread-187] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 186
20:09:37.464 [pool-1-thread-162] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 161
20:09:37.468 [pool-1-thread-113] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 112
20:09:37.475 [pool-1-thread-68] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 67
20:09:37.464 [pool-1-thread-26] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 25
20:09:37.468 [pool-1-thread-131] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 130
20:09:37.470 [pool-1-thread-142] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 141
20:09:37.468 [pool-1-thread-114] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 113
20:09:37.468 [pool-1-thread-152] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 151
20:09:37.475 [pool-1-thread-69] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 68
20:09:37.464 [pool-1-thread-178] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 177
20:09:37.475 [pool-1-thread-70] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 69
20:09:37.468 [pool-1-thread-194] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 193
20:09:37.475 [pool-1-thread-71] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 70
20:09:37.475 [pool-1-thread-72] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 71
20:09:37.468 [pool-1-thread-112] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 111
20:09:37.475 [pool-1-thread-73] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 72
20:09:37.464 [pool-1-thread-172] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 171
20:09:37.464 [pool-1-thread-166] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 165
20:09:37.468 [pool-1-thread-198] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 197
20:09:37.475 [pool-1-thread-41] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 40
20:09:37.464 [pool-1-thread-177] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 176
20:09:37.464 [pool-1-thread-167] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 166
20:09:37.474 [pool-1-thread-44] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 43
20:09:37.468 [pool-1-thread-128] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 127
20:09:37.474 [pool-1-thread-42] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 41
20:09:37.468 [pool-1-thread-189] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 188
20:09:37.468 [pool-1-thread-136] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 135
20:09:37.470 [pool-1-thread-145] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 144
20:09:37.474 [pool-1-thread-43] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 42
20:09:37.470 [pool-1-thread-141] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 140
20:09:37.469 [pool-1-thread-150] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 149
20:09:37.464 [pool-1-thread-170] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 169
20:09:37.474 [pool-1-thread-46] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 45
20:09:37.468 [pool-1-thread-111] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 110
20:09:37.474 [pool-1-thread-45] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 44
20:09:37.468 [pool-1-thread-191] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 190
20:09:37.464 [pool-1-thread-156] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 155
20:09:37.468 [pool-1-thread-196] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 195
20:09:37.464 [pool-1-thread-161] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 160
20:09:37.474 [pool-1-thread-47] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 46
20:09:37.464 [pool-1-thread-165] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 164
20:09:37.464 [pool-1-thread-154] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 153
20:09:37.464 [pool-1-thread-75] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 74
20:09:37.464 [pool-1-thread-169] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 168
20:09:37.474 [pool-1-thread-48] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 47
20:09:37.468 [pool-1-thread-129] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 128
20:09:37.464 [pool-1-thread-158] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 157
20:09:37.468 [pool-1-thread-135] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 134
20:09:37.474 [pool-1-thread-49] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 48
20:09:37.464 [pool-1-thread-199] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 198
20:09:37.469 [pool-1-thread-149] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 148
20:09:37.468 [pool-1-thread-190] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 189
20:09:37.474 [pool-1-thread-50] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 49
20:09:37.464 [pool-1-thread-175] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 174
20:09:37.464 [pool-1-thread-185] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 184
20:09:37.464 [pool-1-thread-174] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 173
20:09:37.474 [pool-1-thread-51] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 50
20:09:37.464 [pool-1-thread-186] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 185
20:09:37.468 [pool-1-thread-200] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 199
20:09:37.468 [pool-1-thread-134] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 133
20:09:37.474 [pool-1-thread-53] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 52
20:09:37.470 [pool-1-thread-140] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 139
20:09:37.469 [pool-1-thread-148] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 147
20:09:37.468 [pool-1-thread-188] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 187
20:09:37.474 [pool-1-thread-52] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 51
20:09:37.470 [pool-1-thread-139] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 138
20:09:37.470 [pool-1-thread-147] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 146
20:09:37.464 [pool-1-thread-168] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 167
20:09:37.474 [pool-1-thread-55] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 54
20:09:37.464 [pool-1-thread-155] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 154
20:09:37.464 [pool-1-thread-160] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 159
20:09:37.468 [pool-1-thread-133] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 132
20:09:37.464 [pool-1-thread-176] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 175
20:09:37.468 [pool-1-thread-127] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 126
20:09:37.468 [pool-1-thread-195] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 194
20:09:37.464 [pool-1-thread-173] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 172
20:09:37.468 [pool-1-thread-192] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 191
20:09:37.468 [pool-1-thread-130] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - 129
20:09:37.640 [main] INFO com.yuxing.springbootdemo.juc.CountDownLatchExample - finish

猜你喜欢

转载自blog.csdn.net/N2H4N2H4/article/details/82908055