public class MutilThreadTest {
/** * 方式一:callable 有返回值 * @param bb * @return * @throws Exception */ // @Async public Callable<String> testCallable1(String bb) throws Exception{ Callable<String> result= new Callable<String>() { @Override public String call() throws Exception { System.err.println("线程一启动了"); System.err.println("线程一启动了"); System.err.println("线程一启动了"); Thread.sleep(4000); return bb; }}; return result; } //@Async public Callable<String> testCallable2(String aa) throws Exception{ Callable<String> result= new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(5000); System.err.println("线程2启动了"); System.err.println("线程2启动了"); System.err.println("线程2启动了"); return aa; }}; return result; } @Test //public FutureTask<String> testFutureTask() throws Exception { public void testFutureTask() throws Exception { long start = System.currentTimeMillis(); // Thread.sleep(3000); FutureTask<String> futureTask1 = new FutureTask<String>(testCallable1("xain11111"));// 将Callable写的任务封装到一个由执行者调度的FutureTask对象 FutureTask<String> futureTask2 = new FutureTask<String>(testCallable2("xain2222")); ExecutorService executor = Executors.newFixedThreadPool(2); // 创建线程池并返回ExecutorService实例 executor.execute(futureTask1); // 执行任务 executor.execute(futureTask2); System.err.println("total cost time is :" +(System.currentTimeMillis()-start)); // System.err.println(futureTask1.get()); // System.err.println(futureTask2.get()); // boolean done = futureTask1.isDone(); // boolean done1 = futureTask2.isDone(); // System.err.println(done); // System.err.println(done1); // executor.shutdown(); // 关闭线程池和服务 // Thread.currentThread().join(); // return; while (true) {//等待所有任务都执行结束 boolean done = futureTask1.isDone(); boolean done1 = futureTask2.isDone(); if(done&&done1){ System.err.println("total cost time is11 :" +(System.currentTimeMillis()-start)); System.err.println(futureTask1.get()); System.err.println(futureTask2.get()); break; } } }
}
原文:https://www.cnblogs.com/lshan/p/10880862.html