如何调试返回未来的Java Executor服务中的可调用

如何调试返回未来的Java Executor服务中的可调用,java,multithreading,debugging,future,executorservice,Java,Multithreading,Debugging,Future,Executorservice,我有一个ExecutorService,我用它来多线程处理一些文本,并且将应用于给定文本块的工作单元定义为我的ParserCallable,它返回一个有效负载 所以我有一个 列表>列表 它通过将工作块传递给每个ParserCallable来填充 我想在这个多线程环境中调试ParserCallable,我不关心是哪一个,但我不确定如何从我的代码开始执行任何ParserCallable 看起来像 List<Future<PayLoad>> list = new ArrayLi

我有一个ExecutorService,我用它来多线程处理一些文本,并且将应用于给定文本块的工作单元定义为我的ParserCallable,它返回一个有效负载

所以我有一个 列表>列表

它通过将工作块传递给每个ParserCallable来填充

我想在这个多线程环境中调试ParserCallable,我不关心是哪一个,但我不确定如何从我的代码开始执行任何ParserCallable

看起来像

List<Future<PayLoad>> list = new ArrayList<Future<PayLoad>>();
ExecutorService executor = Executors.newFixedThreadPool(25);
for (int i = 0; i < blocks_of_work.size(); i++) {
   Callable<PayLoad> worker = new ParserCallable(blocks_of_work.get(i));
   Future<PayLoad> submit = executor.submit(worker);
   list.add(submit);
}
List List=new ArrayList();
ExecutorService executor=Executors.newFixedThreadPool(25);
for(int i=0;i

我如何调试任何给定的ParserCallable,以便解决我遇到的一些错误?根据我的代码,我不确定如何进入这些可调用项之一

您需要在callable本身中设置一个断点


从计算机科学理论的角度来看,可以实现平滑调试(毕竟,为什么您的语言关心操作是同步的还是异步的?),但我认为这在任何主流语言(如Java)中都不受支持。

这很奇怪。这是我尝试的第一件事,但它不起作用,所以我在整个地方放了一些,它起了作用。非常感谢。@AdamBronfin可能你只是没有让你调试的线路出错——你认为问题出在这里发布的异步性上。