在实例化新char时,[WAITING]状态下的线程

时间:2016-12-08 15:20:15

标签: java multithreading

我最近偶然发现了一个我无法解释的错误:

线程处于[WAITING]状态,而char buf[] = new char[count + otherLen];内似乎正在执行java.lang.String.concat(String.java:2021)

这是堆栈跟踪:

"WORKER3"/[WAITING]
    java.lang.String.concat(String.java:2021)
    java.net.URLClassLoader$1.run(URLClassLoader.java:357)
    java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    java.lang.Class.forName0(Native Method)
    java.lang.Class.forName(Class.java:186)
    [...]

现在,从Oracle JDK7文档中我们可以看到WAITING状态的线程是:

  

等待线程的线程状态。线程处于等待状态   由于调用以下方法之一:

Object.wait with no timeout   
Thread.join with no timeout   
LockSupport.park

但是String.concat的源代码似乎没有使用任何一个:

 2016       public String concat(String str) {
 2017           int otherLen = str.length();
 2018           if (otherLen == 0) {
 2019               return this;
 2020           }
 2021           char buf[] = new char[count + otherLen];
 2022           getChars(0, count, buf, 0);
 2023           str.getChars(0, otherLen, buf, count);
 2024           return new String(0, count + otherLen, buf);
 2025       }

我觉得这可能与垃圾收集有关,但我找不到任何相关的证据。

有人能说清楚吗?

0 个答案:

没有答案