Java中submit的方法,线程池中 submit()和 execute()方法区别

区别:submit(Callable task)、submit(Runnable task, T result)、submit(Runnable task)归属于ExecutorService接口。

execute(Runnable command)归属于Executor接口。ExecutorService继承了Executor。

submit()有返回值。

execute没有返回值。

代码实例public class ThreadPoolTest {

private String taskName;

public ThreadPoolTest(String taskName) {

this.taskName = taskName;

}

public static void main(String[] args) {

ExecutorService executorService = Executors.newCachedThreadPool();

executorService.execute(new Runnable() {

@Override

public void run() {

System.out.println("execute任务执行中");

}

});

System.out.println("----分界线----");

Future future = executorService.submit(() -> {

System.out.println("submit任务执行中");

return "submit任务完成,这是执行结果";

});

try {

//如果future.get()返回null,任务完成

System.out.println(future.get());

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

System.out.println("任务失败原因:" + e.getCause().getMessage());

}

executorService.shutdown();

}

}

//输出:

----分界线----

execute任务执行中

submit任务执行中

submit任务完成,这是执行结果

submit()方便做异常处理。通过Future.get()可捕获异常。public class ThreadPoolTest implements Runnable {

private String taskName;

public ThreadPoolTest(String taskName) {

this.taskName = taskName;

}

@Override

public void run() {

throw new RuntimeException("此处" + this.taskName + "抛出异常。");

}

public static void main(String[] args) {

ExecutorService executorService = Executors.newCachedThreadPool();

executorService.execute(new ThreadPoolTest("task1"));

System.out.println("----分界线----");

Future> future = executorService.submit(new ThreadPoolTest("task2"));

try {

future.get();//如果future.get()返回null,任务完成

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

System.out.println("任务失败原因:" + e.getCause().getMessage());

}

executorService.shutdown();

}

}

YUKX优科学习网

本文内容及图片来源于网上摘录或读者投稿

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值