1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| final class MessageQueue{ private LinkedList<Message> list = new LinkedList<>(); private int capcity; public MessageQueue(int capcity){ this.capcity = capcity; } public Message take(){ synchronized(list){ while(list.isEmpty()){ try{ list.wait(); }catch(InterruptedException e){ e.printStackTrace(); } } Message message = list.removeFirst(); list.notifyAll(); return message; } } public void put(Message message){ synchronized(list){ while(list.size() == capcity){ try{ list.wait(); }catch (InterruptedException e){ e.printStackTrace(); } } list.addLast(message); list.notifyAll(); } } }
class Message{ private int id; private Object value; public Message(int id, Object value){ this.id = id; this.value = value; } public int getId(){ return id; } public Object getValue(){ return value; } }
|