次のコードがあります。
/*01*/ final BlockingQueue<CsvFileRow> allRows = new LinkedBlockingQueue<CsvFileRow>();
/*02*/ ExecutorService exec = Executors.newFixedThreadPool(3);
/*03*/ Callable<Void> producer = new Callable<Void>() {
/*04*/ @Override
/*05*/ public Void call() throws Exception {
/*06*/ System.out.println("Before producer");
/*07*/ produceDataRows(allRows);
/*08*/ System.out.println(" After producer");
/*09*/ return null;
/*10*/ }
/*11*/ };
/*12*/ Callable<Void> consumer = new Callable<Void>() {
/*13*/ @Override
/*14*/ public Void call() throws Exception {
/*15*/ System.out.println("Before consumer");
/*16*/ consumeDataRows(allRows);
/*17*/ System.out.println(" After consumer");
/*18*/ return null;
/*19*/ }
/*20*/ };
/*21*/ exec.submit(producer);
/*22*/ exec.submit(consumer);
/*23*/ exec.shutdown();
/*24*/ exec.awaitTermination(10, TimeUnit.DAYS);
/*25*/ assert Boolean.TRUE;
行 7、16、21、および 25 にブレークポイントがあります。コードを実行すると、ブレークポイント 21、7、および 25 で停止します。ブレークポイント 16 はスキップされます。ただし、コードは実行されています。出力を参照してください。
Before producer
Before consumer
After consumer
After producer
ここで、ブレークポイント 7 を削除すると、デバッガーはブレークポイント 21、16、25 で停止します。
これは非常に厄介な問題です。実際、IntelliJ がブレークポイントを無視することに気付いたシナリオは他にもありますが、これは非常に気がかりなことです。
何か不足していますか?