public Map<Address, Double> classify(AddressSetView addresses, TaskMonitor monitor)
			throws CancelledException {
		monitor.initialize(addresses.getNumAddresses());
		int preBytes = modelRow.getNumPreBytes();
		int initialBytes = modelRow.getNumInitialBytes();
		EnsembleModel<Label> randomForest = modelRow.getRandomForest();
		Msg.info(this, "Number of addresses to classify: " + addresses.getNumAddresses());
		GThreadPool threadPool = GThreadPool.getSharedThreadPool("FunctionStartClassifier");

		ConcurrentQBuilder<Address, Double> classifyBuilder = new ConcurrentQBuilder<>();
		ConcurrentQ<Address, Double> classifyQ = classifyBuilder.setThreadPool(threadPool)
				.setCollectResults(true)
				.setMonitor(monitor)
				.build(new FunctionStartCallback(randomForest, preBytes, initialBytes,
					modelRow.getIncludeBitLevelFeatures(), program, target));
		classifyQ.add(addresses.getAddresses(true));
		Collection<QResult<Address, Double>> results = Collections.emptyList();
		long start = System.nanoTime();
		try {
			results = classifyQ.waitForResults();
		}
		catch (InterruptedException e) {
			monitor.checkCancelled();
			Msg.error(this, "Exception while classifying functions: " + e.getMessage());
		}
		long end = System.nanoTime();
		Msg.info(this, String.format("Classification time: %g seconds",
			(end - start) / RandomForestTrainingTask.NANOSECONDS_PER_SECOND));
		Map<Address, Double> addrToProb = new HashMap<>();
		for (QResult<Address, Double> result : results) {
			Double score = null;
			try {
				score = result.getResult();
			}
			catch (Exception e) {
				Msg.error(this, "Problem  getting score of Address " + result.getItem() + ": " +
					e.getMessage());
				continue;
			}
			if (score != null && score >= probabilityThreshold) {
				addrToProb.put(result.getItem(), score);
			}
		}
		return addrToProb;
	}
Classifies the addresses in {@code addresses} in parallel.
@param addresses addresses to classify
@param monitor monitor
@return map from addresses to probabilities
@throws CancelledException if monitor is canceled
Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/FunctionStartClassifier.java