201214_개찰구프로젝트_개찰구03

정재현·2020년 12월 14일
0

TIL

목록 보기
14/80

오늘은 Blocking Queue를 이용한 멀티쓰레드 예제를 진행할 예정이다.
개찰구 - 유동인구를 컨트롤하기 위한 수단으로 쓰일것으로 예상중이다.
Blocking Deque 를 사용하기 전에 Queue 에서 나온게 Deque 이므로
Blocking Queue 를 사용하려 해본다.

Blocking Queue를 이용하기 전에 내장된 메서드들을 먼저 살펴보자면,

  • .add(): 큐에 추가할 때 공간이 꽉차있으면 Exception을 뱉는다. 그리고 종료.
  • .put(): Exception은 발생하지 않지만 큐에 추가할 공간이 생길 때까지 무한히 대기한다.
  • .offer(): Exception은 발생하지 않지만큐에 추가할 공간이 없다면, false를 return 한다.
  • .offer(timeout): offer와 마찬가지지만 지정된 timeout 동안 대기하고 공간이 없으면 false, 생기면 추가하고 true를 return 한다.

나는 .offer(timeout) 을 사용할 것이다.
쓰는 이유는 내가 구현할 개찰구와 딱 맞을 것으로 생각했기 때문이다.
timeout 동안 줄서는 사람들을 기다리고 (사람들의 움직임은 알고리즘을 통해 진행하지 않을까?) true를 리턴하는 방식으로.

  • .take(): 큐에서 아이템을 삭제하고 그 값을 return;
    맨 처음에 넣은 값을 삭제하고, 만약 큐가 empty 이면 아이템이 추가될 때까지 기다리는데 이때 InterruptException 이 발생할 수 있기때문에 여기서 try - catch 로 잡아준다. 대기 중에 다른 쓰레드에서 아이템이 추가되면 그 값을 return한다. 이게 멀티쓰레드 사용할 수 있다는 말 같다.

인터럽트 익셉션: http://happinessoncode.com/2017/10/09/java-thread-interrupt/

BlockingQueue 예제는 Producer 와 Consumer 를 이용해서 각각 BlockingQueue 를 만들어 ProducerConsumerTest의 main에 멀티쓰레드를 테스트해봤는데 음.. 뭔가 정확하게 이해가 가지는 않는다.
내일 다시 볼것!

github: https://github.com/jeong-jaehyeon/JavaProject/tree/blockingQueue

오늘의 코멘트:만들어놓은게 많아서 할수있는게 많구나.

profile
"돈받고 일하면 프로다"

0개의 댓글