繁体   English   中英

Integer.MAX_VALUE是否有任何并行问题

[英]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 !!! 现在真正的遗憾是,当我在罚球线上放置一个断点时,一切正常。 这怎么可能?

编辑

  • 这两个变量的类型均为int
  • totalLength是局部变量,maxLength是参数
  • 调试器不会在那里停下来,并且在该抛出行上有断点时根本不会抛出异常。
  • 我实际上不知道为什么我怀疑并行性,这仅仅是因为它是Web应用程序
  • 我承认使用MAX_VALUE的风险很大(在下一步中,我将尝试降低此限制),但是我希望除了if语句的成功分支外,还能执行其他一些操作。 而且,输入流中使用的字节数组实际上还不够长。 在JVM中这绝对是不可能的情况:-)。
  • 上面的代码在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,所以我认为条件永远不会为真

确保totalLengthlong

(以下代码段始终会引发异常。)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM