package lobstack; import java.util.TreeMap; import java.util.concurrent.SynchronousQueue; import jelectrum.SimpleFuture; public class LobstackWorkThread extends Thread { private SynchronousQueue<WorkUnit> queue; public LobstackWorkThread(SynchronousQueue<WorkUnit> queue) { this.queue = queue; setName("LobstackWorkThread"); setDaemon(true); } public void run() { while(true) { SimpleFuture<NodeEntry> return_node = null; try { WorkUnit wu = queue.take(); if (wu.mode.equals("PUT")) { return_node = wu.return_entry; NodeEntry ne = wu.node.putAll(wu.stack, wu.save_entries, wu.put_map); return_node.setResult(ne); } else if (wu.mode.equals("REPOSITION")) { return_node = wu.return_entry; NodeEntry ne = wu.node.reposition(wu.stack, wu.save_entries, wu.min_file); return_node.setResult(ne); } else if (wu.mode.equals("ESTIMATE_REPOSITION")) { TreeMap<Integer, Long> sz_map = wu.node.estimateReposition(wu.stack, wu.max_file); wu.estimate.setResult(sz_map); } } catch(Throwable t) { if (return_node != null) { t.printStackTrace(); return_node.setException(new RuntimeException(t)); } else { t.printStackTrace(); } } } } }