java多线程异步和阻塞性调用方式

java多线程可以直接通过ExecutorService接口的execute方法提交任务,也可以通过invokeAll方法让多个任务一起提交,前者execute是异步提交,也就是说不会阻塞主线程,后则会阻塞主线程,等待所有任务执行完成主线程才回继续执行。其实不管是execute还是invokeAll,它们最终都会去执行Executor接口的execute(Runnable run)方法,下面是截取的部分源码

这里写图片描述

很明显invokeAll方法调用了execute,并且传入的是一个继承自Runnable接口的RunnableFuture对象,所以其实它们的原理是一样的, 还有一点注意到了,这里还调用了Future对象的get,这个方法是阻塞性的,这也是为什么invokeAll会阻塞主线程的原因。

猜你喜欢

转载自blog.csdn.net/huangdi1309/article/details/80091709