전체 글

    Blocking Queue 블락킹 큐

    특정 상황에 스레드를 대시하도록 하는 큐. 멀티 스레드 환경에서 사용되는 자료구조. 큐의 상태에 따라 자원의 생성과 소비를 제어할 수 있는 큐. 가득차있거나, 비어있을 경우 예외를 방지하기 위해 각각의 상황에서 큐를 블록킹함. 큐에서 원소를 빼려고 시도했는데 큐가 비어있거나, 큐에 원소를 넣으려 했는데 큐에 넣을 수 있는 공간이 없을 때, 디큐/인큐 호출 스레드를 대기하도록 한다. 비어있는 큐에서 원소를 빼려고 시도하는 스레드의 대기 상태는다른 스레드가 이 큐에 원소를 넣을 때까지 지속된다. 꽉 찬 큐에 원소를 넣으려고 시도하는 스레드의 대기 상태는 다른 스레드가 큐에서 우너소를 빼거나 큐를 클리어하거나 큐의 공간이 확보될 때 까지 지속된다.

    LockSupport.park()란

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

    CountDownLatch란

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