首页天道酬勤java中show什么意思,java实例教程

java中show什么意思,java实例教程

张世龙 05-05 20:23 31次浏览

文章目录执行机制返回值不同的Exception处理

java中Runnable和Callable的区别

在java的多线程开发中,Runnable一直是多线程的核心,而Callable是java1.5中添加的扩展版本。

本文详细讨论了Runnable和Callable之间的区别。

执行机制首先看一下Runnable和Callable的接口定义。

@ functionalinterfacepublicinterfacerunnable {/* * * whenanobjectimplementinginterfacecoderunnable/code is used * tocreateattto startingthethreadcausestheobject ' s * code run/codemethodtobecalledinthatseparatelyexecuting * thread.* p * thegeneralcontractofthemethodcoderun/codeisthatitmay * takeanyactionwhatsoever.* * @ see Java.lang.thread # run ()/} @ functionalinterfacepublicinterfacecallablev {/* * * computes aresult, orthrowsanexceptionifunabletodoso.* * @ returncomputedresult * @ throwsexceptionifunabletocomputearesult */vcall ()

我知道有两种方法可以定制Thread。 一个不是继承Thread,而是实现Runnable接口。 这是因为Thread本身就是Runnable的实现。

classthreadimplementsrunnable {/* makesureregisternativesisthefirstthingclinitdoes.*/privatestaticnativevoidregisternation } .因此,Runnable可以在Runnable和刚才介绍的ExecutorService中运行,而Callable只能在ExecutorService中运行。

返回值的差异根据上述两个接口的定义,Runnable可以不返回值,Callable可以返回值。

如果我们在ExecutorService上提交,看看有什么不同:

runnablepublicvoidexecutetask ({ executorserviceexecutorservice=executors.newsinglethreadexecutor ) }; future future=executorservice.submit ()-log.info ) ' inrunnable!' ); executorService.shutdown (; } callablepublicvoidexecutetask ((executorserviceexecutorservice=executors.newsinglethreadexecutor ) ); future future=executorservice.submit ()-{log.info(incallable! ' ); 返回'可调用'; ); executorService.shutdown (; }我们都返回了Future,但如果是runnable,则Future不包含任何值。

Exception处理Runnable的run ) )方法定义不会抛出异常,因此任何Checked Exception都必须由run ) )实现方法自己处理。

Callable的Call (方法抛出了throws Exception,因此Call ) )方法外部可以捕获Checked Exception。 看看在Callable上的异常处理吧。

publicvoidexecutetaskwithexception ((executorserviceexecutorservice=executors.newsinglethreadexecutor ); future future=executorservice.submit ()-{log.info(incallable! ' ); thrownewcustomerexception (acustomerexception ); ); try { Object object=future.get (; } catch (互联互通) { e.printStackTrace ); } catch (执行任务) { e.printStackTrace ); e.getCause (; } executorService.shutdown (; }在上面的示例中,在Callable中抛出了自定义的客户执行。

此异常包含在返回的Future中。 可以从future.get (调用方法时抛出ExecutionException,e.getCause ) )中检索包含kadsb的特定异常信息。

有关本文中的示例,请参见https://github.com/DDE an 2009/learn-Java-concurrency/tree/master/runnable-callable

看看更多精彩的内容:

从区块链入门到退出系列教程-密码学、超账簿、以太网、Libra、 持续更新Spring Boot 2.X系列教程3360 (如比特币)持续更新Spring Boot-学习7天Spring 5.X系列教程3360满足您对Spring5的所有想象

callable类型,runnable类