gpt4 book ai didi

java - 无法使用线程执行代码块中的所有语句

转载 作者:行者123 更新时间:2023-11-30 11:44:48 25 4
gpt4 key购买 nike

我正在尝试读取文件夹中的多个文件并使用线程同时处理它们。

程序的结构是这样的:

// Assuming there are 5 files in the directory

// creating the threads
ExecutorService pool = Executors.newFixedThreadPool(5)
ExecutorCompletionService service = new ExecutorCompletionService(pool)

directory.listFiles().each { eachFile ->
service.submit(new FileReader(eachFile, param2))
}


// the FileReader class
class FileReader implements Callable {
File file
String param
FileReader(File file, String param){
this.file = file
this.param = param
}

Object call(){
LOG.info("Processing file" + filePath)
ConfigInfo configInfo = new ConfigInfo()
configInfo.setFilePath(filePath);
configInfo.setReaderUid(readerUid);
configInfo.setPatternsMap(patternsMap);
new LogfileDataProcessor(configObject, param).processFileContent()
}

}

这里的调用方法创建另一个对象并调用它的方法。

但奇怪的是,程序在执行调用方法中的某些行后终止(它没有到达其中的最终语句)。我在这里很困惑。有人可以阐明正在发生的事情吗?请帮助我

最佳答案

您的程序需要等待线程完成。例如,您可以为此使用 CountDownLatch:

CountDownLatch latch = new CountDownLatch(numberOfFilesInDirectory);

directory.listFiles().each { eachFile ->
service.submit(new FileReader(eachFile, param2))
}

latch.await();


// And in your Callable:
class FileReader implements Callable {
File file
String param
FileReader(File file, String param){
this.file = file
this.param = param
}

public Object call() {
try {
LOG.info("Processing file" + filePath)
ConfigInfo configInfo = new ConfigInfo()
configInfo.setFilePath(filePath);
configInfo.setReaderUid(readerUid);
configInfo.setPatternsMap(patternsMap);
new LogfileDataProcessor(configObject, param).processFileContent();
} finally {
latch .countDown();
}
}

您可以将闩锁作为构造函数参数传递给线程。

关于java - 无法使用线程执行代码块中的所有语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612436/

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