怎么得到多线程的运算结果并处理

        最近参加了一个学校的程序设计比赛,为了解决运算速度使用了多线程,但是一个问题难倒我了,那就是怎么获取多线程的运算结果并作处理呢?查看的很多博客也没有得到满意的答案。


目的:将多线程的运算结果存入线程安全的集合中

一下几种方案我都没有成功,可能是我的使用有问题,如果有人看到感谢你们指出

1.使用带有返回值的Callable和接收返回值的Future

    但是使用多个线程同时持有一个FutureTask进行运算

    线程池使用FutureTask时候需要注意的一点事


	Callable<Map<Integer, String>> task = new Task(resultMap2);
		FutureTask<Map<Integer, String>> future = new FutureTask<Map<Integer, String>>(
				task);

		int n = 10;
		Thread[] threads = new Thread[n];
		for (int i = 0; i < n; i++) {
			threads[i] = new Thread(future);
			// service.execute(threads[i]);
			threads[i].start();
		}
    失败


2.使用join()方法,但是这样子线程并入主线程和单线程有什么区别

    失败


3.使用CyclicBarrier

ExecutorService service = Executors.newCachedThreadPool();
		final CyclicBarrier cb = new CyclicBarrier(10, new Runnable() {
			@Override
			public void run() {
				Set<Map.Entry<Integer, String>> entry = resultMap2.entrySet();
				Iterator<Map.Entry<Integer, String>> iterator = entry
						.iterator();
				while (iterator.hasNext()) {
					Map.Entry<Integer, String> en = iterator.next();
					System.out.println(en.getKey());
					System.out.println(en.getValue());
				}
			}
		});

设置每10个线程处理一次结果,但是这样的话储存运算结果的集合就会以直被处理结果的Runnable占用

    失败


4.某日突然灵光一闪

使用while(flag)一直使主线程不结束

while (flag) {
			while (lists.size() == read.filePathsList.size()) {
				//排序
				Collections.sort(lists, new ListListSortComparator(0, "asc"){});
				CreatExcel.creatExcel(lists, titles, "xlsx", "企业信息表").write(os);
				os.close();
				long millis2 = System.currentTimeMillis();
				System.out.println("(millis2 - millis1)---结束-------->"
						+ (millis2 - millis1));

				flag = false;
				break;
			}
		}

    在所有的结果运算结束后flag=flase

    成功