我试图重写spring threadpooltaskexecutorprotectedcreatequeue(int queuecapacity)方法,通过创建并返回priorityblockingqueue而不是默认值来定制它( LinkedBlockingQueue
/ SynchronousQueue
). 在这样做的过程中,我遇到的问题是,该方法是否需要创建并返回blockingqueue当 ThreadPoolTaskExecutor
如果底层 BlockingQueue
只能保持 Runnable
?
谢谢
1条答案
按热度按时间sg3maiej1#
这里真的没有问题。一
Callable
表示可以运行的一组代码,这些代码返回一个值并可能引发异常。如果我们忽略返回值,并以某种方式处理异常,那么它可以用作Runnable
!例如:
现在我可以转换任何
Callable
变成一个Runnable
这样地:当然,这实际上是如何做到的
ThreadPoolExecutor
(这是什么ThreadPoolTaskExecutor
是基于)要复杂得多。submit
需要返回一个Future
,所以它还需要 PackageCallable
变成一个Future
,以及Runnable
.AbstractExecutorService
(哪个ThreadPoolExecutor
继承自) PackageCallable
她被送进了医院submit
进入FutureTask
s、 你可以看看他们run
如果你感兴趣的话,方法看起来像这里。它的结构基本上和我上面写的一样,只是更多Future
-关联逻辑与状态管理Future
.