threadinfo.java

来自「jpda例子文件」· Java 代码 · 共 130 行

JAVA
130
字号
/* * @(#)ThreadInfo.java	1.10 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* * Copyright (c) 1997-1999 by Sun Microsystems, Inc. All Rights Reserved. *  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. *  * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. *  * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */package com.sun.tools.example.debug.bdi;import com.sun.jdi.*;import java.util.List;import java.util.ArrayList;import java.util.Iterator;//### Should handle target VM death or connection failure cleanly.public class ThreadInfo {    private ThreadReference thread;    private int status;    private int frameCount;    Object userObject;  // User-supplied annotation.    private boolean interrupted = false;    private void assureInterrupted() throws VMNotInterruptedException {	if (!interrupted) {	    throw new VMNotInterruptedException();	}    }        ThreadInfo (ThreadReference thread) {	this.thread = thread;	this.frameCount = -1;    }    public ThreadReference thread() {	return thread;    }     public int getStatus() throws VMNotInterruptedException {        assureInterrupted();	update();	return status;    }    public int getFrameCount() throws VMNotInterruptedException {        assureInterrupted();	update();	return frameCount;    }    public StackFrame getFrame(int index) throws VMNotInterruptedException {        assureInterrupted();	update();	try {	    return thread.frame(index);	} catch (IncompatibleThreadStateException e) {	    // Should not happen	    interrupted = false;	    throw new VMNotInterruptedException();	}    }    public Object getUserObject() {	return userObject;    }    public void setUserObject(Object obj) {	userObject = obj;    }    // Refresh upon first access after cache is cleared.    void update() throws VMNotInterruptedException {	if (frameCount == -1) {	    try {		status = thread.status();		frameCount = thread.frameCount();	    } catch (IncompatibleThreadStateException e) {		// Should not happen		interrupted = false;		throw new VMNotInterruptedException();	    }	}    }        // Called from 'ExecutionManager'.        void validate() {	interrupted = true;    }    void invalidate() {	interrupted = false;	frameCount = -1;	status = ThreadReference.THREAD_STATUS_UNKNOWN;    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?