AQS—CountDownLatch
20960 단어 Java
Countdown Latch 는 동기 화 보조 클래스 입 니 다.이 를 통 해 현재 스 레 드 를 막 는 것 과 유사 한 기능 을 완성 할 수 있 습 니 다.다시 말 하면 하나의 스 레 드 나 여러 스 레 드 가 실 행 될 때 까지 기다 릴 수 있 습 니 다.Countdown Latch 는 주어진 계수 기 를 사용 하여 초기 화 했 습 니 다.이 계수 기 는 원자 조작 이 며,동시에 하나의 스 레 드 만 이 계산 기 를 조작 할 수 있 습 니 다.이 종류의 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 이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.