目录

创建ExecutorService

关闭执行服务对象

获取任务的执行的返回值


 

JAVA系列:ExecutorService的使用方法_java

 

创建ExecutorService

ExecutorService实际上是一个线程池的管理工具:

        ExecutorService executorService = Executors.newCachedThreadPool();

        ExecutorService executorService = Executors.newFixedThreadPool(3);

        ExecutorService executorService = Executors.newSingleThreadExecutor();

 

关闭执行服务对象

        executorService.shutdown();

JAVA系列:ExecutorService的使用方法_java_02 

 

 

获取任务的执行的返回值

在Java5之后,任务分两类:一类是实现了Runnable接口的类,一类是实现了Callable接口的类。两者都可以被ExecutorService执行,但是Runnable任务没有返回值,而Callable任务有返回值。并且Callable的call()方法只能通过ExecutorService的(<T> task) 方法来执行,并且返回一个 <T><T>,是表示任务等待完成的 Future。

public interface Calla ble<V>

返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。

Callable 接口类似于Runnable的run()方法,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。

JAVA系列:ExecutorService的使用方法_抛出异常_03

JAVA系列:ExecutorService的使用方法_管理工具_04

pool-1-thread-1调用call()

pool-1-thread-3调用call()

pool-1-thread-2调用call()

java.lang.ArithmeticException: / by zero

at TaskWithResult.call(Test.java:54)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at java.lang.Thread.run(Thread.java:662)

pool-1-thread-2call()结果:1

pool-1-thread-3call()结果:0