一个同步队列例子
这个用的也比较少, 做一个参考, 原文见这里
private BlockingQueue workQueue = new LinkedBlockingQueue();private Map commandQueueMap = new ConcurrentHashMap(); public SynchronousQueue addCommand(Command command) { SynchronousQueue queue = new SynchronousQueue(); commandQueueMap.put(command, queue); workQueue.offer(command); return queue;} public Object call() throws Exception { try { Command command = workQueue.take(); Result result = command.execute(); SynchronousQueue queue = commandQueueMap.get(command); queue.offer(result); return null; } catch (InterruptedException e) { throw new WorkException(e); }}Command command;SynchronousQueue queue = commandRunner.addCommand(command);Result result = queue.poll(2, TimeUnit.MINUTES);if (result == null) {throw new CommandTooLongException(command);} else {return result;}