使用executor可以实现类似与Thread的方法开辟线程:
使用execute方法执行一个Runnable接口的实现。但是存在很多限制:
1. 无法获取返回值
2. 无法知道运行的进度,无法取消任务。
3. 无法执行批量的任务。
4. 无法终止线程。
boolean awaitTermination(long timeout, TimeUnit unit)
等待线程完成,当调用shutdown或超时时间到了或被意外中断了线程,线程退出返回true,超时返回false
执行所有的任务,并返回一个List
带有超时时间的执行所有的任务,并返回一个List
执行所有的任务,并返回一个执行成功的结果。未完成的将被取消。
带有超时时间的执行所有的任务,并返回一个执行成功的结果。未完成的将被取消。
boolean isShutdown()
判断是否被停止。
boolean isTerminated()
调用shutdown或shutdownNow后是否执行完成。
void shutdown()
终止任务的执行,不再接受新的任务。
List
尽最大努力停止当前执行的任务,并中断等待的任务。
提交一个异步任务,返回一个对应的Future对象。
Future> submit(Runnable task)
提交一个异步任务,返回一个对应的Future对象。
提交一个异步任务,返回一个对应的Future对象。成功执行,该对象的get方法返回值为result
表示一个Task的未来控制对象,维护任务状态,获取任务的结果,判断任务是否完成等等。
boolean cancel(boolean mayInterruptIfRunning)
取消任务,参数表示是否中断线程。
V get()
阻塞并等待任务执行的返回值
V get(long timeout, TimeUnit unit)
带有超时的阻塞并等待任务执行的返回值
boolean isCancelled()
是否被取消
boolean isDone()
是否结束(正常结束,异常,被取消)
使用executorService实例的submit提交任务,使用任务的get方法阻塞获取结果。
此类提供的静态方法可以提供ExecutorService的实现:
1. ExecutorService
2. ScheduledExecutorService
3. ThreadFactory
例如,static ExecutorService newFixedThreadPool(int nThreads)
创建固定线程个数的线程池,当所有的线程都在运行,新提交的任务需要在线程池的队列中等待。
这里使用newFixedThreadPool创建了一个线程池,创建了一个Callable实现。
这里使用executorService的submit方法提交了一个任务,返回一个Future对象。
使用isDone判断线程是否完成(正常完成、异常或取消)
使用get获取执行结果
使用shutdownNow停止线程池。