ExecutorService-与调试和在Eclipse中运行不同的输出

问题描述 投票:2回答:2

我正在使用Executor Java框架编写代码,并且正在Eclipse上测试我的代码,但是我看到了一件奇怪的事情。在eclipse上使用调试模式,我可以在控制台上打印输出,或者当我使用调试模式进入(F5)时更好,我可以在控制台上打印输出,但是如果使用调试模式,可以使用step return(F7)或运行应用程序,它不会在控制台上打印任何内容。

在调试模式下进入(F5)之前,在我的输出下面:

mapBuffer 
[[B@1af2d44a, [B@18d87d80, [B@618425b5, [B@58695725, [B@543588e6, [B@f5acb9d, [B@4fb3ee4e]

以及在带调试模式的步骤return(F7)或运行应用程序之后:

mapBuffer 
[]

使用相同的代码,我有两个不同的输出。

public boolean readPieceCount() throws IOException {

        //byte[] buffer = null;
        SortedMap<Integer,byte[]> mapBuffer=new TreeMap<>();    


        ExecutorService executor = Executors.newFixedThreadPool(1);
        executor.submit(() -> {

        for (Integer i=0; i<NUMFILES;i++) 
        {
         Path path = Paths.get(pathPieceCount+"pieceCount"+(i+1)+".csv");
          if(Files.exists(path, LinkOption.NOFOLLOW_LINKS)) 
          {
           byte[] buffer = null;
           try {
            buffer = Files.readAllBytes(path);
                mapBuffer.put(i+1, buffer);
           } catch (IOException e) {
             System.out.println("Exception on readPieceCount!!!");
           }
             }
        }
        });

       System.out.println("mapBuffer ");
       System.out.println(mapBuffer.values());
    executor.shutdown();
/*
more code
*/

这是我遇到问题的代码的一部分。

我希望在所有模式下都有相同的结果。老实说,昨天我花了很多时间,但我不明白哪里出了问题。只有一个确认。当我运行这部分代码时,总是会在映射上获得相同的缓冲区序列,或者执行程序可以更改序列?

java executorservice
2个回答
1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.