Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.anadix.utils;
  
  import java.util.Map;
 
 
 public class MultithreadedAnalyzer {
 	private ExecutorService exec;
 	private final Analyzer analyzer;
 	private final Map<IntegerFuture<Report>> results;
 	private final AtomicInteger count = new AtomicInteger(1);
 
 		this(Anadix.newAnalyzer(), Runtime.getRuntime().availableProcessors());
 	}
 
 	public MultithreadedAnalyzer(Analyzer analyzer) {
 		this(analyzer, Runtime.getRuntime().availableProcessors());
 	}
 
 	public MultithreadedAnalyzer(Analyzer analyzerint threads) {
 		if (analyzer == null) {
 			throw new NullPointerException("analyzer can't be null");
 		}
 		if (threads < 1) {
 			throw new IllegalArgumentException("thread count must be greater than or equal to 1");
 		}
 
 		this. = analyzer;
 		 = Executors.newFixedThreadPool(threads);
 	}
 
 	public int submittAnalysis(Source source) {
 		int id = .getAndIncrement();
 		.put(id.submit(new AnalysisTask(source)));
 
 		return id;
 	}
 
 	public Report getResult(int idthrows ResultException {
 		return getResult(idtrue);
 	}
 
 	public Report getResult(int idboolean blockthrows ResultException {
 		Future<Reportfuture = .get(id);
 		try {
 			if (future != null) {
 				if (block) {
 					return future.get();
 				} else {
 					try {
 						return future.get(1, .);
 					} catch (TimeoutException ex) {
 						// ok
 					}
 				}
 			}
 		} catch (InterruptedException ex) {
 			throw new ResultException("Interrupted"ex);
 		} catch (ExecutionException ex) {
 			throw new ResultException("Error during execution"ex.getCause());
 		}
 
 		return null;
 	}
 
 	public boolean dispose() {
 		return dispose(30, .);
 	}
 
 	public boolean dispose(long timeoutTimeUnit unit) {
 		try {
 			if (!.awaitTermination(timeoutunit)) {
 			} else {
 				return true;
 			}
 		} catch (InterruptedException ex) {
 		}
 		return false;
 	}
 
 	private static class AnalysisTask implements Callable<Report> {
 		private final Analyzer a;
		private final Source s;
		public AnalysisTask(Analyzer aSource s) {
			this. = a;
			this. = s;
		}
		public Report call() throws Exception {
			return .analyze();
		}
	}
New to GrepCode? Check out our FAQ X