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