-  
       - All Superinterfaces:
-  
         Mirror,ObjectReference,Value
 
 public interface ThreadReference extends ObjectReference 来自目标VM的线程对象。 ThreadReference是ObjectReference,可以从目标VM访问特定于线程的信息。- 从以下版本开始:
- 1.3
 
-  
        
       -  
             字段汇总字段 变量和类型 字段 描述 static intTHREAD_STATUS_MONITOR线程正在等待java监视器static intTHREAD_STATUS_NOT_STARTED线程尚未启动static intTHREAD_STATUS_RUNNING线程是可运行的static intTHREAD_STATUS_SLEEPING线程正在休眠 - 调用了Thread.sleep()或JVM_Sleep()static intTHREAD_STATUS_UNKNOWN线程状态未知static intTHREAD_STATUS_WAIT线程正在等待 - 调用了Object.wait()或JVM_MonitorWait()static intTHREAD_STATUS_ZOMBIE线程已完成执行-  
               Fields declared in interface com.sun.jdi.ObjectReferenceINVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED
 
-  
               
 -  
             方法摘要所有方法 实例方法 抽象方法 变量和类型 方法 描述 ObjectReferencecurrentContendedMonitor()返回此线程当前正在等待的监视器(如果有)的ObjectReference。voidforceEarlyReturn(Value value)强制方法在到达return语句之前返回。StackFrameframe(int index)返回线程当前调用堆栈中给定索引处的StackFrame。intframeCount()返回线程当前调用堆栈中的堆栈帧数。List<StackFrame>frames()返回包含线程当前调用堆栈中每个StackFrame的List。List<StackFrame>frames(int start, int length)返回一个List,其中包含来自线程当前调用堆栈的StackFrame个镜像范围。voidinterrupt()除非线程已被调试器暂停,否则会中断此线程。booleanisAtBreakpoint()确定线程是否在断点处挂起。booleanisSuspended()确定调试器是否已挂起线程。Stringname()返回此线程的名称。List<ObjectReference>ownedMonitors()为线程拥有的每个监视器返回包含ObjectReference的List。List<MonitorInfo>ownedMonitorsAndFrames()返回包含线程拥有的每个监视器的MonitorInfo对象的List。voidpopFrames(StackFrame frame)流行堆栈帧。voidresume()恢复此主题。intstatus()返回线程的状态。voidstop(ObjectReference throwable)使用异步异常停止此线程。voidsuspend()暂停这个帖子。intsuspendCount()返回此线程的挂起挂起数。ThreadGroupReferencethreadGroup()返回此线程的线程组。-  
               声明方法的接口 com.sun.jdi.MirrortoString, virtualMachine
 -  
               声明方法的接口 com.sun.jdi.ObjectReferencedisableCollection, enableCollection, entryCount, equals, getValue, getValues, hashCode, invokeMethod, isCollected, owningThread, referenceType, referringObjects, setValue, uniqueID, waitingThreads
 
-  
               
 
-  
             
-  
        
       -  
             字段详细信息-  THREAD_STATUS_UNKNOWNstatic final int THREAD_STATUS_UNKNOWN 线程状态未知- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_ZOMBIEstatic final int THREAD_STATUS_ZOMBIE 线程已完成执行- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_RUNNINGstatic final int THREAD_STATUS_RUNNING 线程是可运行的- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_SLEEPINGstatic final int THREAD_STATUS_SLEEPING 线程正在休眠 - 调用了Thread.sleep()或JVM_Sleep()- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_MONITORstatic final int THREAD_STATUS_MONITOR 线程正在等待java监视器- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_WAITstatic final int THREAD_STATUS_WAIT 线程正在等待 - 调用了Object.wait()或JVM_MonitorWait()- 另请参见:
- 常数字段值
 
 -  THREAD_STATUS_NOT_STARTEDstatic final int THREAD_STATUS_NOT_STARTED 线程尚未启动- 另请参见:
- 常数字段值
 
 
-  
 -  
             方法详细信息-  nameString name() 返回此线程的名称。- 结果
- 包含线程名称的字符串。
 
 -  suspendvoid suspend() 暂停这个帖子。 线程可以通过resume()恢复,或通过VirtualMachine.resume()与其他线程一起恢复。与 Thread.suspend()不同,计算虚拟机和单个线程的挂起。 在线程再次运行之前,必须恢复它(通过resume()或resume())与其被挂起的次数相同。使用此方法挂起单线程具有与 Thread.suspend()相同的危险。 如果挂起的线程持有另一个正在运行的线程所需的监视器,则可以在目标VM中进行死锁(至少直到暂停的线程再次恢复)。保证暂停的线程保持挂起状态,直到通过上述JDI恢复方法之一恢复; 目标VM中的应用程序无法通过 Thread.resume()恢复挂起的线程。- 异常
-  
              VMCannotBeModifiedException- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()。
 
 -  resumevoid resume() 恢复此主题。 如果此线程先前未通过suspend()或VirtualMachine.suspend()暂停,或者由于SUSPEND_ALL或SUSPEND_EVENT_THREAD事件而暂停,则调用此方法无效。 否则,此线程上挂起的挂起计数将减少。 如果它递减到0,则线程将继续执行。 注意:从事件相关暂停中恢复的正常方法是通过EventSet.resume()。- 异常
-  
              VMCannotBeModifiedException- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()。
 
 -  suspendCountint suspendCount() 返回此线程的挂起挂起数。 有关计数暂停的说明,请参见suspend()。- 结果
- 挂起计数作为整数挂起
 
 -  stopvoid stop(ObjectReference throwable) throws InvalidTypeException 使用异步异常停止此线程。 目标VM中的调试器线程将使用给定的Throwable对象停止此线程。- 参数
-  
              throwable- 要抛出的异步异常。
- 异常
-  
              InvalidTypeException- 如果throwable不是目标VM中的java.lang.Throwable实例。
-  
              VMCannotBeModifiedException- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()。
 
 -  interruptvoid interrupt() 除非线程已被调试器暂停,否则会中断此线程。- 异常
-  
              VMCannotBeModifiedException- 如果VirtualMachine是只读的 - 请参阅VirtualMachine.canBeModified()。
- 另请参见:
-  
              Thread.interrupt()
 
 -  statusint status() 返回线程的状态。 如果线程未挂起,则返回线程的当前状态。 如果线程被挂起,停牌前线程的状态返回(或THREAD_STATUS_UNKNOWN如果该信息不可用。isSuspended()可用于确定线程是否已经暂停。
 -  isSuspendedboolean isSuspended() 确定调试器是否已挂起线程。- 结果
-  
              true如果线程当前暂停; 否则为false。
 
 -  isAtBreakpointboolean isAtBreakpoint() 确定线程是否在断点处挂起。- 结果
-  
              true如果线程当前在断点处停止; 否则为false。
 
 -  threadGroupThreadGroupReference threadGroup() 返回此线程的线程组。- 结果
-  
              ThreadGroupReference,它镜像目标VM中此线程的线程组。
 
 -  frameCountint frameCount() throws IncompatibleThreadStateException返回线程当前调用堆栈中的堆栈帧数。 必须暂停线程(通常通过VM的中断)来获取此信息,并且只有在线程再次恢复之后才会有效。- 结果
- 整数帧数
- 异常
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
 
 -  framesList<StackFrame> frames() throws IncompatibleThreadStateException 返回包含线程当前调用堆栈中每个StackFrame的List。 必须暂停线程(通常通过VM的中断)来获取此信息,并且只有在线程再次恢复之后才会有效。- 结果
-  
              一个StackFrame的列表,当前帧首先跟随每个调用者的帧。
- 异常
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
 
 -  frameStackFrame frame(int index) throws IncompatibleThreadStateException - 参数
-  
              index- 所需的帧
- 结果
-  
              要求StackFrame
- 异常
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
-  
              IndexOutOfBoundsException- 如果索引大于或等于frameCount()或为负数。
 
 -  framesList<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()
 
 -  ownedMonitorsList<ObjectReference> ownedMonitors() throws IncompatibleThreadStateException 为线程拥有的每个监视器返回包含ObjectReference的List。 监视器由线程拥有(如果已经输入(通过synchronized语句或进入同步方法)并且尚未通过Object.wait()放弃)。并非所有目标虚拟机都支持此操作。 使用 VirtualMachine.canGetOwnedMonitorInfo()确定是否支持该操作。- 结果
-  
              一个ObjectReference对象的列表。 如果此线程没有监视器,则列表的长度为零。
- 异常
-  
              UnsupportedOperationException- 如果目标虚拟机不支持此操作。
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
 
 -  ownedMonitorsAndFramesList<MonitorInfo> ownedMonitorsAndFrames() throws IncompatibleThreadStateException 返回包含线程拥有的每个监视器的MonitorInfo对象的List。 监视器由线程拥有(如果已经输入(通过synchronized语句或进入同步方法)并且尚未通过Object.wait()放弃。并非所有目标虚拟机都支持此操作。 使用 VirtualMachine.canGetMonitorFrameInfo()确定是否支持该操作。- 结果
-  
              一个MonitorInfo对象的列表。 如果此线程没有监视器,则列表的长度为零。
- 异常
-  
              UnsupportedOperationException- 如果目标虚拟机不支持此操作。
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
- 从以下版本开始:
- 1.6
 
 -  currentContendedMonitorObjectReference currentContendedMonitor() throws IncompatibleThreadStateException 返回此线程当前正在等待的监视器(如果有)的ObjectReference。 线程可以通过进入同步方法(同步语句或Object.wait())来等待监视器。status()方法可用于区分前两种情况和第三种情况。并非所有目标虚拟机都支持此操作。 使用 VirtualMachine.canGetCurrentContendedMonitor()确定是否支持该操作。- 结果
-  
              对应于竞争监视器的ObjectReference,如果不等待监视器则为null。
- 异常
-  
              UnsupportedOperationException- 如果目标虚拟机不支持此操作。
-  
              IncompatibleThreadStateException- 如果线程未在目标VM中挂起
 
 -  popFramesvoid 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
 
 -  forceEarlyReturnvoid 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
 
 
-  
 
-