package GeDBIT.parallel.app; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import GeDBIT.parallel.LocalIndexWorkTask; import GeDBIT.parallel.Task; import GeDBIT.parallel.WorkThread; import GeDBIT.parallel.WorkThreadUtil; public class QueryLocalVPIndex { public static String[] servers = null; public static void main(String[] args) { int subtree = 1; String file = ""; for (int i = 0; i < args.length; i = i + 2) { if (args[i].equalsIgnoreCase("-st")) subtree = Integer.parseInt(args[i + 1]); else if (args[i].equalsIgnoreCase("-sv")) file = args[i + 1]; else continue; } BufferedReader br; servers = new String[subtree]; try { br = new BufferedReader(new InputStreamReader(new FileInputStream( file))); String data = null; int counter = 0; while ((data = br.readLine()) != null && counter < subtree) { servers[counter++] = data; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } WorkThreadUtil.newInstance(subtree); final double startTime = System.currentTimeMillis(); for (int i = 0; i < subtree; i++) { WorkThread thread = (WorkThread) WorkThreadUtil.getThreadsPool() .get(i); Task newTask = new LocalIndexWorkTask(servers[i], args); LinkedList<Task> queue = thread.getQueue(); synchronized (queue) { queue.addLast(newTask); queue.notify(); } } WorkThreadUtil.setFinishedStatus(); WorkThreadUtil.waitAllQueryFinished(); final double endTime = System.currentTimeMillis(); final double t = (endTime - startTime) / 1000; System.out.println("Total search time: " + t); } }