import java.util.LinkedList; import java.util.NoSuchElementException; public class JobQueue implements Queue { private static final String NAME = "JOB QUEUE"; private static final Object monitor = new Object(); private LinkedList jobs = new LinkedList(); // ------------------------------------------------// // ÇϳªÀÇ °´Ã¼¸¸À» »ý¼ºÇؼ­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ½Ì±ÛÅæ ÆÐÅÏÀ» »ç¿ëÇÑ´Ù. private static JobQueue instance = new JobQueue(); private JobQueue() {} public static JobQueue getInstance() { if(instance == null) { synchronized (JobQueue.class) { instance = new JobQueue(); } } return instance; } // ------------------------------------------------// public String getName() { return NAME; } public LinkedList getLinkedList() { return jobs; } public void clear() { synchronized (monitor) { jobs.clear(); } } public void put(Object o) { synchronized (monitor) { jobs.addLast(o); // »õ·Î¿î µ¥ÀÌÅÍ°¡ Ãß°¡µÇ¾î Å¥°¡ ÀÌ¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î // ¸¸¾à ´ë±âÁßÀÎ ½º·¹µå°¡ ÀÖ´Ù¸é ±ú¿î´Ù. monitor.notify(); } } public Object pop() throws InterruptedException, NoSuchElementException { Object o = null; synchronized (monitor) { // ´õ ÀÌ»ó Å¥¿¡¼­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ°¡ ¾øÀ¸¹Ç·Î ½º·¹µå¸¦ ´ë±â½Ã±ä´Ù. if(jobs.isEmpty()) { monitor.wait(); } o = jobs.removeFirst(); } if(o == null) throw new NoSuchElementException(); return o; } public int size() { return jobs.size(); } }