通过下面的代码片段,我真的很困惑:Java线程的代码流
@Component
public class DrawingFileExplorer {
private final ExecutorService pool = Executors.newFixedThreadPool(10);
public void explore(File drawingFolder) throws InterruptedException {
for(File each : drawingFolder.listFiles(DrawingFileFilter.getInstance())) {
if(each.isDirectory()) {
explore(each);
} else {
//pool.execute(new DrawingFileReviewer(each));
}
}
System.out.println("THIS LINE OF CODE SHOULD BE INVOKED ONCE");
pool.shutdown();
pool.awaitTermination(Integer.MAX_VALUE, TimeUnit.SECONDS);
}
}
// Trigger of DrawingFileExplorer
public class DrawingFileExplorerTest {
private static File baseFolder = new File("C:\\Users\\Jake\\Desktop\\baseFolder\\02. Current Drawings");
public static void main(String[] args) throws InterruptedException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
DrawingFileExplorer drawingFileExplorer = (DrawingFileExplorer) ctx.getBean("drawingFileExplorer");
drawingFileExplorer.explore(baseFolder);
}
}
正如我知道线路的System.out.println(..)之后的foreach应该只被调用一次。 但代码的输出如下。
THIS LINE OF CODE SHOULD BE INVOKED ONCE
THIS LINE OF CODE SHOULD BE INVOKED ONCE
任何人都可以解释它是如何被调用两次?由于关闭(),我的线程在第一个输出和第二个输出线之间没有执行。
探索正在调用自己。 – BevynQ
听到答案后听起来很平凡的问题 –