【问题标题】:How to debug a Callable in Java ExecutorService that returns Futures如何在返回 Futures 的 Java ExecutorService 中调试 Callable
【发布时间】:2014-06-12 18:47:16
【问题描述】:

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

所以我有一个 列表>列表;

通过将大量工作交给每个 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);
}

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

【问题讨论】:

    标签: java multithreading debugging future executorservice


    【解决方案1】:

    您需要在可调用对象本身中放置一个断点。

    从计算机科学理论的角度来看,启用平滑调试是可能的(毕竟为什么您的语言会关心操作是同步还是异步?)但我不相信任何主流语言都支持这一点,比如 Java,还没有。

    【讨论】:

    • 这很奇怪。这是我尝试的第一件事,但它没有用,所以我在整个地方放了一些,它起作用了。非常感谢。
    • @AdamBronfin 可能您只是没有触发您调试的线路 - 您认为问题出在此处发布的异步性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多