Collection을 사용할 때는 목적과 용도에 맞게 선택하여 사용해야 한다.(왜 그것을 사용하게 되었는지가 중요하다고 생각한다.)
아래의 이미지는 Collection을 선정할때 도움이 될것같아 참고하게 되었다.
아래의 참고링크를 보다 Blocking collctions이라는 것이 있어 찾아보게 되었다.
feature
따라서 멀티스레드 환경의 Producer-Consumer type문제에 적합 (스레드 safe)
class Producer implements Runnable {
private final BlockingQueue queue;
Producer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { queue.put(produce()); }
} catch (InterruptedException ex) { ... handle ...}
}
Object produce() { ... }
}
class Consumer implements Runnable {
private final BlockingQueue queue;
Consumer(BlockingQueue q) { queue = q; }
public void run() {
try {
while (true) { consume(queue.take()); }
} catch (InterruptedException ex) { ... handle ...}
}
void consume(Object x) { ... }
}
class Setup {
void main() {
BlockingQueue q = new SomeQueueImplementation();
Producer p = new Producer(q);
Consumer c1 = new Consumer(q);
Consumer c2 = new Consumer(q);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}
}
http://java-latte.blogspot.kr/2013/06/dont-know-which-mapcollection-to-use.html
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html