打开瞧一瞧: http://bitar.cn
package com.thread; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 多线程执行有返回值的处理 * @author Administrator * */ public class ThreadResultExecutor { /** * @param args */ public static void main(String[] args) throws Exception { ExecutorService exec=Executors.newFixedThreadPool(50); CompletionService<String> serv = new ExecutorCompletionService<String>(exec); //模拟,一个对象tt,在多个线程中使用,是否会影响相互的值 for (int i = 0; i < 50; i++) { serv.submit(new runTest<String>("aa"+i)); } for (int i = 0; i < 50; i++) { serv.submit(new runTest<String>("bb"+i)); } System.out.println("start"); // for (int i = 0; i < 50; i++) { // try { // //serv.take(); // System.out.println(serv.take().get()); // //System.out.println(serv.take().get()); // } catch (Exception e) { // e.printStackTrace(); // } // } exec.shutdown();//此方法等待处理完毕后再释放 //System.exit(0); } } class runTest<String> implements Callable<String>{ private String tt; @Override public String call() throws Exception { Thread.currentThread().sleep(2000); System.out.println( tt+"="+Thread.currentThread().getId()); return (String) (tt+"="+Thread.currentThread().getId()); } public runTest(String tt){ this.tt=tt; //ttt.set(tt); } }