개발/스프링

    LockSupport.park()란

    병렬 프로그래밍에서 Thread의 성능 향상을 위해 가능한 블록되거나 컨텍스트 스위칭 되지 않도록 애쓴다. Lock-Free 알고리즘 같은 것들은 이런 노력의 일환이다. 그러나 이런 Lock-Free 알고리즘 같은 것들은 Thread의 활동성을 제한하지 않도록 하다 보니 결합이 발생했을 경우 Spin-Waiting 형태로 구현되는 경향이 있다. 경합이 많거나 구간이 큰 경우는 CPU의 낭비를 가져오는 요인이 된다. 그래서 현실적으로는 일정조건 동안의 Spin-Waiting후에는 스레드를 블록시키는, 즉 잠재우는 형태로 알고리즘을 만든다. 기존의 Java에서는 synchronizd도구 없이는 Thread를 임의로 블록시키고 다시 재기동 시킬만한 도구가 없었다. 따라서 synchronized 없이 Lock-..

    CountDownLatch란

    어떤 쓰레드가 다른 쓰레드에서 작업이 완료될 때 까지 기다릴 수 있도록 해주는 클래스입니다. 쓰레드를 여러개 실행했을 때, 일정 갯수의 스레드가 모두 끝날 때까지 기다려야만 다음으로 진행할 수 있거나, 다른 스레드를 실행시킬 수 있는 경우 사용한다. CountDownLatch는 생성할 대 1 이상의 카운트를 인자값으로 받는다. 특정 메소드 내부에서 await() 메소드로 대기 상태를 만들어 주고, count가 0이 되는 순간 대기 상태를 해제한다.