本文共 3902 字,大约阅读时间需要 13 分钟。
import java.util.concurrent.*;/** * Created by chenh on 2017/3/23. */public class ConcurrentDemo { // 没有返回值 //public interface Runnable public class RunnableTask implements Runnable{ public void run() { System.out.println("run"); } } //有返回值 //public interface Callablepublic class CallableTask implements Callable { public String call() throws Exception { System.out.println("call"); return "call"; } } public void testRunnableTask(){ ExecutorService executorService = Executors.newCachedThreadPool(); //public interface Future Future future = executorService.submit(new RunnableTask()); try { System.out.println("testRunnableTask: " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } executorService.shutdown(); //new Thread(new RunnableTask()).start() } public void testCallableTask() { ExecutorService executorService = Executors.newCachedThreadPool(); Future future = executorService.submit(new CallableTask()); try { System.out.println("testCallableTask: " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } executorService.shutdown(); } public void testFutureTask1(){ ExecutorService executorService = Executors.newCachedThreadPool(); //public interface RunnableFuture extends Runnable, Future //public class FutureTask implements RunnableFuture FutureTask futureTask = new FutureTask (new RunnableTask(), "result"); Future future = executorService.submit(futureTask); try { System.out.println("testFutureTask: " + future.get()); System.out.println("testFutureTask: " + futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } executorService.shutdown(); } public void testFutureTask2(){ ExecutorService executorService = Executors.newCachedThreadPool(); //public interface RunnableFuture extends Runnable, Future //public class FutureTask implements RunnableFuture FutureTask futureTask = new FutureTask (new CallableTask()); Future future = executorService.submit(futureTask); try { System.out.println("testFutureTask: " + future.get()); System.out.println("testFutureTask: " + futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } executorService.shutdown(); } public class CallableTask2 implements Callable { int id; public CallableTask2(int id){ this.id = id; } public Integer call() throws Exception { return id; } } public void testCompletionService(){ ExecutorService executorService = Executors.newCachedThreadPool(); //public class ExecutorCompletionService implements CompletionService CompletionService completionService = new ExecutorCompletionService (executorService); for (int i=0; i<10; i++) { completionService.submit(new CallableTask2(i)); } for (int i=0; i<10; i++) { try { System.out.println(completionService.take().get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } executorService.shutdown(); } public static void main(String[] args){ ConcurrentDemo demo = new ConcurrentDemo(); demo.testRunnableTask(); demo.testCallableTask(); demo.testFutureTask1(); demo.testFutureTask2(); demo.testCompletionService(); }}
运行效果
run
testRunnableTask: null call testCallableTask: call run testFutureTask: null testFutureTask: result call testFutureTask: null testFutureTask: call 0 1 4 5 2 7 8 3 6 9转载地址:http://rltab.baihongyu.com/