ExecutorService有如下几个执行方法:
- execute(Runnable)
- submit(Runnable)
- submit(Callable)
- invokeAny(...)
- invokeAll(...)
execute方法:
@Test public void testUser() { ExecutorService threadPool = Executors.newScheduledThreadPool(3); threadPool.execute(new Runnable() { public void run() { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < 10; i++) { System.out.println("jkl"); } } }); System.out.println("结束"); threadPool.shutdown(); }
如上只会打印:结束
不会打印jkl字符串,因为这个方法就是没有办法获知task的执行结果。
submit(Runnable)
和execute(Runnable)
区别是前者可以返回一个Future对象,通过返回的Future对象,我们可以检查提交的任务是否执行完毕,请看下面执行的例子:
Future future = executorService.submit(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
}
});
future.get(); //returns null if the task has finished correctly.
如果任务执行完成,future.get()
方法会返回一个null。注意,future.get()方法会产生阻塞。