ExecutorService的submit(Runnable x)和execute(Runnable x) 两个方法的本质区别

时间:2023-03-09 02:59:15
ExecutorService的submit(Runnable x)和execute(Runnable x) 两个方法的本质区别
Runnable任务没有返回值,而Callable任务有返回值。并且Callable的call()方法只能通过ExecutorService的submit(Callable <T> task) 方法来执行

public class RunnableTestMain {

    public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(2); /**
* execute(Runnable x) 没有返回值。可以执行任务,但无法判断任务是否成功完成。
*/
pool.execute(new RunnableTest("Task1")); /**
* submit(Runnable x) 返回一个future。可以用这个future来判断任务是否成功完成。请看下面:
*/
Future future = pool.submit(new RunnableTest("Task2")); try {
if(future.get()==null){//如果Future's get返回null,任务完成
System.out.println("任务完成");
}
} catch (InterruptedException e) {
} catch (ExecutionException e) {
//否则我们可以看看任务失败的原因是什么
System.out.println(e.getCause().getMessage());
} } } public class RunnableTest implements Runnable { private String taskName; public RunnableTest(final String taskName) {
this.taskName = taskName;
} @Override
public void run() {
System.out.println("Inside "+taskName);
throw new RuntimeException("RuntimeException from inside " + taskName);
} }

转自:http://blog.163.com/huxb23@126/blog/static/625898182011121232077/