我已经编写了这样的生产者/消费者代码,该代码应生成大文件并填充随机数据
<?xml version="1.0" encoding="UTF-8"?>
<persistence
version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="case-consumer-persistence">
<class>dao.converter.DateToLongConverter</class>
<class>aClass</class>
</persistence-unit>
</persistence>
它可以完成预期的工作。但是由于某种未知的原因,它只能产生约550000个字符串,而不是100万个字符串,我不明白为什么会这样。
有人可以指出我的错误吗?我真的不明白这段代码有什么问题。
答案 0 :(得分:2)
缓冲区
String[] block = new string[arrSize];
在Lambda之外声明。这意味着它将被捕获并重新使用。
通常不会引起注意(您只会写出错误随机数据),但是由于您的if (blockNum < arrSize - 1)
被放置在for循环中,因此您经常将null
写入共享缓冲区。
锻炼,而不是:
block[blockNum] = random.Next().ToString();
使用
block[blockNum] = i.ToString();
并预测和验证结果。