模块  jdk.jdi
软件包  com.sun.jdi

Interface ThreadReference

    • 字段详细信息

      • THREAD_STATUS_UNKNOWN

        static final int THREAD_STATUS_UNKNOWN
        线程状态未知
        另请参见:
        常数字段值
      • THREAD_STATUS_ZOMBIE

        static final int THREAD_STATUS_ZOMBIE
        线程已完成执行
        另请参见:
        常数字段值
      • THREAD_STATUS_RUNNING

        static final int THREAD_STATUS_RUNNING
        线程是可运行的
        另请参见:
        常数字段值
      • THREAD_STATUS_SLEEPING

        static final int THREAD_STATUS_SLEEPING
        线程正在休眠 - 调用了Thread.sleep()或JVM_Sleep()
        另请参见:
        常数字段值
      • THREAD_STATUS_MONITOR

        static final int THREAD_STATUS_MONITOR
        线程正在等待java监视器
        另请参见:
        常数字段值
      • THREAD_STATUS_WAIT

        static final int THREAD_STATUS_WAIT
        线程正在等待 - 调用了Object.wait()或JVM_MonitorWait()
        另请参见:
        常数字段值
      • THREAD_STATUS_NOT_STARTED

        static final int THREAD_STATUS_NOT_STARTED
        线程尚未启动
        另请参见:
        常数字段值
    • 方法详细信息

      • name

        String name()
        返回此线程的名称。
        结果
        包含线程名称的字符串。
      • suspend

        void suspend()
        暂停这个帖子。 线程可以通过resume()恢复,或通过VirtualMachine.resume()与其他线程一起恢复。

        Thread.suspend()不同,计算虚拟机和单个线程的挂起。 在线程再次运行之前,必须恢复它(通过resume()resume() )与其被挂起的次数相同。

        使用此方法挂起单线程具有与Thread.suspend()相同的危险。 如果挂起的线程持有另一个正在运行的线程所需的监视器,则可以在目标VM中进行死锁(至少直到暂停的线程再次恢复)。

        保证暂停的线程保持挂起状态,直到通过上述JDI恢复方法之一恢复; 目标VM中的应用程序无法通过Thread.resume()恢复挂起的线程。

        异常
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
      • suspendCount

        int suspendCount()
        返回此线程的挂起挂起数。 有关计数暂停的说明,请参见suspend()
        结果
        挂起计数作为整数挂起
      • isSuspended

        boolean isSuspended()
        确定调试器是否已挂起线程。
        结果
        true如果线程当前暂停; 否则为false
      • isAtBreakpoint

        boolean isAtBreakpoint()
        确定线程是否在断点处挂起。
        结果
        true如果线程当前在断点处停止; 否则为false
      • frameCount

        int frameCount()
                throws IncompatibleThreadStateException
        返回线程当前调用堆栈中的堆栈帧数。 必须暂停线程(通常通过VM的中断)来获取此信息,并且只有在线程再次恢复之后才会有效。
        结果
        整数帧数
        异常
        IncompatibleThreadStateException - 如果线程未在目标VM中挂起
      • frames

        List<StackFrame> frames​(int start,
                                int length)
                         throws IncompatibleThreadStateException
        返回一个List,其中包含来自线程当前调用堆栈的StackFrame镜像范围。 必须暂停线程(通常通过VM的中断)来获取此信息,并且只有在线程再次恢复之后才会有效。
        参数
        start - 要检索的第一帧的索引。 索引0表示当前帧。
        length - 要检索的帧数
        结果
        一个StackFrame的列表,当前帧首先跟随每个调用者的帧。
        异常
        IncompatibleThreadStateException - 如果线程未在目标VM中挂起
        IndexOutOfBoundsException - 如果指定的范围不在堆栈帧指示的范围内。 也就是说,如果满足以下任何条件,则抛出异常:
          start < 0
            start >= frameCount()
            length < 0
            (start+length) > frameCount() 
      • popFrames

        void popFrames​(StackFrame frame)
                throws IncompatibleThreadStateException
        流行堆栈帧。

        所有直到并包括frame帧都从堆栈中弹出。 参数frame之前的帧将成为当前帧。

        执行此操作后,此线程将在创建frame的目标方法的invoke指令处frame frame的方法可以通过进入指令的步骤重新进入。

        恢复操作数堆栈,但是,对被调用方法中发生的参数的任何更改都将保留。 例如,如果方法foo

          void foo(int x) {
                System.out.println("Foo: " + x);
                x = 4;
                System.out.println("pop here");
            } 
        被称为与foo(7)foo在第二弹出println和恢复时,它将打印: Foo: 4

        弹出框架获取的锁定在弹出时释放。 这适用于弹出的同步方法以及其中的任何同步块。

        最后,块不会被执行。

        除了此线程的执行点和锁之外,状态的任何方面都不受此调用的影响。 具体而言,字段的值不变,外部资源(如I / O流)也不变。 另外,目标程序可能处于正常程序流程不可能的状态; 例如,锁定获取的顺序可能会受到干扰。 因此,目标程序可以与用户期望的不同地进行。

        必须暂停指定的线程。

        此线程的所有StackFrame对象均无效。

        此方法不会生成任何事件。

        通过并包括用于帧的调用者的的帧都不是本机的。

        并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canPopFrames()确定是否支持该操作。

        参数
        frame - 要弹出的堆栈帧。 frame在此线程的调用堆栈上。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作 - 请参阅 VirtualMachine.canPopFrames()
        IncompatibleThreadStateException - 如果此线程未被暂停。
        IllegalArgumentException - 如果 frame不在此线程的调用堆栈中。
        NativeMethodException - 如果要弹出的帧之一是本机方法的帧,或者帧之前的 是本机的。
        InvalidStackFrameException - 如果frame已失效。 一旦恢复该线程,堆栈帧就不再有效。 如果没有更多帧,也会抛出此异常。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
        从以下版本开始:
        1.4
      • forceEarlyReturn

        void forceEarlyReturn​(Value value)
                       throws InvalidTypeException,
                              ClassNotLoadedException,
                              IncompatibleThreadStateException
        强制方法在到达return语句之前返回。

        将提前返回的方法称为被调用方法。 被调用的方法是调用此方法时指定线程的当前方法(由Java虚拟机规范中的“帧”部分定义)。

        线程必须暂停。 在此线程上恢复执行Java编程语言代码时发生返回。 在调用此方法和恢复线程执行之间,堆栈的状态是未定义的。

        在被调用的方法中不执行进一步的指令。 具体而言,最后不执行块。 注意:这可能会导致应用程序中的状态不一致。

        通过调用被调用方法获得的锁(如果它是同步方法)和通过在被调用方法中输入同步块而获得的锁被释放。 注意:这不适用于本机锁或java.util.concurrent.locks锁。

        诸如MethodExit之类的事件将在正常返回时生成。

        被调用的方法必须是非本机Java编程语言方法。 强制在堆栈上只有一个帧的线程上返回会导致线程在恢复时退出。

        value参数是方法返回的值。 如果方法的返回类型为void,则value必须为VoidValue 对象值必须与方法返回类型兼容(这意味着必须通过封闭类的类加载器加载方法返回类型)。 原始值必须是与方法返回类型兼容的赋值,或者必须可转换为变量类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。

        并非所有目标虚拟机都支持此操作。 使用VirtualMachine.canForceEarlyReturn()确定是否支持该操作。

        参数
        value - 方法返回的值。
        异常
        UnsupportedOperationException - 如果目标虚拟机不支持此操作 - 请参阅 canForceEarlyReturn()
        IncompatibleThreadStateException - 如果此线程未挂起。
        NativeMethodException - 如果要返回的帧是本机方法的帧。
        InvalidStackFrameException - 如果没有框架。
        InvalidTypeException - 如果值的类型与方法的返回类型不匹配。
        ClassNotLoadedException - 如果尚未通过适当的类加载器加载方法的返回类型。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
        从以下版本开始:
        1.6