[英]Are there any parallel issues with Integer.MAX_VALUE
我有以下代码:
if (maxLength>=0 && (++totalLength > maxLength))
throw new IllegalStateException("Form too large");
从字节数组输入流中读取字节的循环中。 maxLength
设置为Integer.MAX_VALUE
因此我认为条件永远不可能成立(并且我并不是在谈论输入流中字节数组的大小,我绝对确定这还不够长)。 但是我从该行抛出了IllegalStateException
!!! 现在真正的遗憾是,当我在罚球线上放置一个断点时,一切正常。 这怎么可能?
编辑 :
上面的代码在UrlEncoded类的jetty-util-7.1.5.v20100705.jar中,我通过调用来使用它
byte[] decodedBytes; byte[] encodedBytes; // v pripade url encoded requestu je potreba pouze odriznout // jmeno falesneho parametru nesouciho kodovany blok encodedBytes = Arrays.copyOfRange(content, "encdata=".length(), content.length); decodedBytes = decodeBytes(request, encodedBytes); // priprav desifrovany text jako vstupni proud decodedInputStream = new ByteArrayInputStream(decodedBytes); // pokud je request url encoded je potreba jej manualne parsovat // pro potreby funkci vracejicich parametry UrlEncoded.decodeTo(decodedInputStream, parameters, request.getCharacterEncoding(), Integer.MAX_VALUE);
Integer.MAX_VALUE是否有任何并行问题
不,这很可能不是由于任何竞争条件引起的(除非您有其他线程在修改maxLength
左右)。
根据JLS,整数大于Integer.MAX_VALUE
因此这是由于您的VM中存在错误,或者是基于对maxLength
实际上是Integer.MAX_VALUE
的错误假设。
maxLength设置为Integer.MAX_VALUE,所以我认为条件永远不会为真
确保totalLength
不long
。
(以下代码段始终会引发异常。)
int maxLength = Integer.MAX_VALUE;
long totalLength = 2147483647;
if (maxLength>=0 && (++totalLength > maxLength))
throw new IllegalStateException("Form too large");
如果调试器无法再现该错误,则只需为该异常提供更多信息,例如: "Form too large: " + totalLength + " is larger than " + maxLength
您确定要在比较之前而不是之后增加totalLength吗? 如果进入该语句的totalLength等于maxLength,则将引发异常……这是否可能?
请尝试使用totalLength ++。
只是一个想法。 希望这可以帮助。
现在真正的遗憾是,当我在该罚球线上放置一个断点时,一切正常
您的意思是调试器不会在那里停止吗?
从问题标题看来,您似乎怀疑赛车状况(多线程)问题。 变量如何定义? 您可以再发布一些代码吗?
可以在其他地方修改maxLength吗? 还是最终的?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.