gpt4 book ai didi

java - ExecutorService.execute()静默退出run()方法

转载 作者:行者123 更新时间:2023-12-03 12:59:01 24 4
gpt4 key购买 nike

尝试测试我的一个类可以处理在多个线程上的访问。我有一个JUnit测试,在其中创建了一个类来实现Runnable并运行我的类。

当我运行execute时,它在run()方法中到达一行,并且仅在该线程上退出而没有报告任何问题,我已经用Try-Catch(Throwable)对其进行了包装,但是仍然没有出现问题的迹象。

这是我的代码:

class ConcurrencyTests {
class ConcurrentComponentTracker implements Runnable {
private String component;

ConcurrentComponentTracker(String component) {
this.component = component;
}

@Override
public void run() {
try {
System.out.printf("Component to track: [%s]\n", component);
ParserHandler parserHandler = new ParserHandler();
System.out.println(parserHandler.componentTracker(component));
}
catch (Throwable t) {
t.printStackTrace();
}
}
}

@Test
void runRunner() {
ExecutorService executor = Executors.newFixedThreadPool(4);
String[] componentsToTrack = {"x", "y", "z"};

executor.execute(new ConcurrentComponentTracker(componentsToTrack[0]));
executor.execute(new ConcurrentComponentTracker(componentsToTrack[1]));
executor.execute(new ConcurrentComponentTracker(componentsToTrack[2]));
}
}

并输出:
Component to track: [x] Component to track: [y] Component to track: [z]
它似乎只是在ParserHandler实例化行上退出而不报告任何内容。当尝试调试并进入该行时,它只是跳到最后而没有让我检查ParserHandler类实例化。

最佳答案

谁在评论中回答然后将其删除都为我解决了问题。我的主要JUnit线程没有等待其他线程完成。因此,我将这些行添加到最后,并且按预期方式工作:

executor.shutdown();

try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
}
catch (InterruptedException e) {
e.printStackTrace();
}

关于java - ExecutorService.execute()静默退出run()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com