通過下面的代碼片段,我真的很困惑: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
聽到答案後聽起來很平凡的問題 –