ExecutorService中submit和execute的区别
1个回答
2016-11-29 · 互联网+翻译,人工翻译平台
翻译达人
翻译达人(www.fanyidaren.com)顺应时代的发展,采取用互联网+翻译的模式,致力于打造一个为客户提供翻译服务的专业翻译平台,将翻译资源进行有效整合,让客户不再为找翻译而烦恼。
向TA提问
关注
展开全部
ExecutorService中submit和execute的区别:
1、方法execute()没有返回值,而submit()方法可以有返回值(通过Callable和Future接口)
2、方法execute()在默认情况下异常直接抛出(即打印堆栈信息),不能捕获,但是可以通过自定义ThreadFactory的方式进行捕获(通过setUncaughtExceptionHandler方法设置),而submit()方法在默认的情况下可以捕获异常。
3、方法execute()提交的未执行的任务可以通过remove(Runnable)方法删除,而submit()提交的任务即使还未执行也不能通过remove(Runnable)方法删除。
4、execute只能接受Runnable类型的任务。submit不管是Runnable还是Callable类型的任务都可以接受,但是Runnable返回值均为void,所以使用Future的get()获得的还是null。
5、execute中抛出异常。
① execute中的是Runnable接口的实现,所以只能使用try、catch来捕获Checked
Exception,通过实现UncaughtExceptionHande接口处理UncheckedException, 即和普通线程的处理方式完全一致
②submit中抛出异常
不管提交的是Runnable还是Callable类型的任务,如果不对返回值Future调用get()方法,都会吃掉异常
1、方法execute()没有返回值,而submit()方法可以有返回值(通过Callable和Future接口)
2、方法execute()在默认情况下异常直接抛出(即打印堆栈信息),不能捕获,但是可以通过自定义ThreadFactory的方式进行捕获(通过setUncaughtExceptionHandler方法设置),而submit()方法在默认的情况下可以捕获异常。
3、方法execute()提交的未执行的任务可以通过remove(Runnable)方法删除,而submit()提交的任务即使还未执行也不能通过remove(Runnable)方法删除。
4、execute只能接受Runnable类型的任务。submit不管是Runnable还是Callable类型的任务都可以接受,但是Runnable返回值均为void,所以使用Future的get()获得的还是null。
5、execute中抛出异常。
① execute中的是Runnable接口的实现,所以只能使用try、catch来捕获Checked
Exception,通过实现UncaughtExceptionHande接口处理UncheckedException, 即和普通线程的处理方式完全一致
②submit中抛出异常
不管提交的是Runnable还是Callable类型的任务,如果不对返回值Future调用get()方法,都会吃掉异常
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询