ArrayBlockingQueue<Integer> arrayBlockingQueue = new ArrayBlockingQueue<>(3);
try {
arrayBlockingQueue.add(10);
arrayBlockingQueue.add(20);
arrayBlockingQueue.add(30);
arrayBlockingQueue.add(40); // 큐가 가득 차서 예외 발생
} catch (IllegalStateException e) {
System.out.println(e.getMessage()); // Queue full
}
ArrayBlockingQueue<Integer> arrayBlockingQueue2 = new ArrayBlockingQueue<>(3);
arrayBlockingQueue2.offer(10);
arrayBlockingQueue2.offer(20);
arrayBlockingQueue2.offer(30);
System.out.println(arrayBlockingQueue2.offer(40)); // false
자바에서 Queue 객체에 값을 넣어줄 경우에는 add와 offer 두 가지 방법이 있는데
add는 Collection 인터페이스에서 내려오는 메소드고
offer는 Queue 인터페이스에서 내려오는 메소드가 되겠는데
차이점은 ArrayBlockingQueue 같은 크기가 제한된 형태의 Queue를 사용할 경우에 Queue의 크기를 넘길 정도로 add를 사용해주면 Exception이 발생하게 되고, Offer의 경우에는 false가 떨어지게 된다, 따라서 예기치 못한 예외를 방지하기 위해서는 offer를 사용해 주는 것이 좋겠지만, PriorityQueue 같은 거의 무한정으로 들어가는 Queue의 경우에는 넣지 못할 일이 발생하지 않기 때문에 add / offer 중 무엇을 사용해도 같은 의미라고 보면 된다.
Leave a Reply