private static void pickCards(final GameState state)
	{
		int players = state.getPlayerList().length;
		
		HashSet<Card> chosenCards = new HashSet<Card>();
		ExecutorService cardPicker = 
				Executors.newFixedThreadPool(players);
		
		@SuppressWarnings("unchecked")
		Future<Card>[] cardFutures = new Future[players];
		
		int index = 0;
		
		//We launch new threads for each players card
		for(final Player p : state.getPlayerList())
		{
			cardFutures[index] = cardPicker.submit(new Callable<Card>(){
				@Override
				public Card call() throws Exception {
					return p.pickCard(state);
				}
				
			});
			index++;
		}
		
		//Now that all the threads are launched, we collect the results
		for(Future<Card> f : cardFutures)
		{
			Card choice = null;
			try {
				choice = f.get();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (ExecutionException e) {
				e.printStackTrace();
			}
			if(choice != null)
			{
				chosenCards.add(choice);
			}
		}
		
		cardPicker.shutdown();
		
		//Now that we've collected all the cards, remove them from the players' hands and
		//put them on the board
		for(Card c : chosenCards)
		{
			Player player = state.getPlayer(c.getFaction());
			player.removeFromHand(c);
			
			state.getBoard().addCard(c);
		}
	}