java程序在Scanner初始化时崩溃

时间:2016-02-18 01:22:11

标签: java multithreading thread-safety java-8 java.util.scanner

我正在使用扫描仪从文件中读取行,并根据给定的模式替换每行中的一些文本。这是在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方法之前,有时在进入那里之后......我无法弄清楚出了什么问题。主线程正在退出我想但我什么也看不见奇怪的发生在这里,应该让它意外退出。

1 个答案:

答案 0 :(得分:0)

我找到了。其实这是我的愚蠢。我忘了等待线程退出,因此即使在线程完成之前主线程也会退出。抱歉打扰!

现在我这样做:

for (int i = 0; i < threadsUsed; i++) {
  pool.take().get();
}

表示所有线程并在finally块中关闭执行程序服务