private static List<SubFileParser> getCompletedWorkers( File rdpFile, int numCPUs)
		throws Exception
	{
		BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<String>();
		List<SubFileParser> subList = new ArrayList<SubFileParser>();
		int numAdded = 0;
		List<Thread> startedThreads = new ArrayList<Thread>();
		
		for( int x=0; x < numCPUs; x++)
		{
			SubFileParser sfp = new SubFileParser(blockingQueue);
			subList.add(sfp);
			Thread t =  new Thread(sfp);
			t.start();
			startedThreads.add(t);
		}
			
		BufferedReader reader = new BufferedReader(new FileReader(rdpFile));
		String nextLine = reader.readLine();
		
		while(nextLine != null)
		{
			blockingQueue.add(nextLine);
			nextLine = reader.readLine();
			numAdded++;
		}
		
		reader.close();
		
		while(! blockingQueue.isEmpty())
			Thread.yield();
		
		boolean keepLooping = true;
		
		while(keepLooping)
		{
			int assignedCount =0;
			
			for( SubFileParser sfp : subList )
				assignedCount += sfp.listSize;
			
			if( assignedCount > numAdded )
				throw new Exception("Threading error");
			
			if( assignedCount == numAdded)
			{
				keepLooping = false;
			}
			else
			{
				Thread.yield();
			}
		}
		
		for( Thread t : startedThreads)
			t.interrupt();
		
		return subList;
	}