我正在使用扫描仪从文件中读取行,并根据给定的模式替换每行中的一些文本。这是在API内部完成的。我的程序是多线程的。同时,多个线程可以调用此特定API。
以下是线程扫描程序初始化行,其中线程崩溃:
public static void replaceInFile(Properties replacements, Path targetFile) {
...
Scanner in = new Scanner(targetFile, "UTF-8");
...
}
我确信两个线程不会同时访问任何单个文件。任何人都可以向我说明正在发生的事情吗?
更新:
public Void call() throws Exception {
Iterator it = paths.iterator();
while(it.hasNext()){
try {
String filePath = it.next().toString();
//BuildUtil replacer = new BuildUtil();
BuildUtil.replaceInFile(replacements, Paths.get(filePath));
} catch(Exception e) {
e.printStackTrace();
}
}
这是线程的call()。现在我观察它显示“框架不可用”甚至在进入BuildUtils的replaceInFile方法之前,有时在进入那里之后......我无法弄清楚出了什么问题。主线程正在退出我想但我什么也看不见奇怪的发生在这里,应该让它意外退出。
答案 0 :(得分:0)
我找到了。其实这是我的愚蠢。我忘了等待线程退出,因此即使在线程完成之前主线程也会退出。抱歉打扰!
现在我这样做:
for (int i = 0; i < threadsUsed; i++) {
pool.take().get();
}
表示所有线程并在finally块中关闭执行程序服务