첨듣는 키워드였는데 좋은 것 알아갑니다 !
@Slf4j
public class FieldServiceTest {
private FieldService service = new FieldService();
@Test
void service() throws Exception {
log.info("Main start");
int count = 5;
CountDownLatch countDownLatch = new CountDownLatch(count);
ExecutorService executorService = Executors.newFixedThreadPool(processors());
Stream.generate(() -> {
String user = UUID.randomUUID().toString().substring(0, 8);
return new Thread(new FieldServiceWorker(countDownLatch, service, user));
})
.limit(count)
.collect(Collectors.toList())
.forEach(executorService::submit);
countDownLatch.await(); // countDownLatch의 카운트가 0이 될 때까지 대기
log.info("Finished");
}
private int processors() {
return Runtime.getRuntime().availableProcessors() + 1;
}
}
@Slf4j
public class FieldService {
private String nameStore;
public String service(final String name) {
String threadName = Thread.currentThread().getName() + Thread.currentThread().getId();
log.info("{}: 입력 name={}", threadName, name);
log.info("{}: 저장 name={} -> nameStore={}", threadName, name, nameStore);
nameStore = name;
TimeUtils.sleep(1000);
log.info("{}: 조회 nameStore={}", threadName, nameStore);
return nameStore;
}
@RequiredArgsConstructor
public static class FieldServiceWorker implements Runnable {
private final CountDownLatch countDownLatch;
private final FieldService service;
private final String name;
@Override
public void run() {
service.service(name);
TimeUtils.sleep(1000);
countDownLatch.countDown(); // countDownLatch의 카운트를 하나 감소시킴.
}
}
}
안녕하세요. 한창훈님, 공식 서포터즈 OMG입니다.
좋은 내용 공유해주셔서 감사합니다. ^^
답글
ㅎㅎ 이걸 찾아보고 사용하셨군요.
공유 감사합니다.
답글
굿잡;
답글