inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

동시성 문제 - 예제 코드

CountDownLatch가 뭔지 궁금해서 찾아봤습니다.

632

한창훈
2

첨듣는 키워드였는데 좋은 것 알아갑니다 !

 

@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의 카운트를 하나 감소시킴.
        }

    }

}

countdownlatch multithread

답변 3

0

OMG

안녕하세요. 한창훈님, 공식 서포터즈 OMG입니다.

좋은 내용 공유해주셔서 감사합니다. ^^

0

김영한

ㅎㅎ 이걸 찾아보고 사용하셨군요.

공유 감사합니다.

0

soap

굿잡;

안녕하세요 선생님

0

368

0