threadstatframe.java
来自「很棒的web服务器源代码」· Java 代码 · 共 158 行
JAVA
158 行
// ThreadStatFrame.java// $Id: ThreadStatFrame.java,v 1.8 2000/08/16 21:37:48 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.status ;import java.util.Hashtable ;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.AttributeRegistry;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.IntegerAttribute;import org.w3c.tools.resources.Resource;import org.w3c.tools.resources.ResourceFrame;import org.w3c.www.http.HTTP;import org.w3c.jigsaw.http.HTTPException;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.jigsaw.frames.HTTPFrame;import org.w3c.jigsaw.html.HtmlGenerator ;/** * The server thread status. * This ought to be the client status, it will shortly (FIXME). It should uses * a two frame display, one listing the clients, and the other one listing per * client informations. * <p>By the Way, this uses the nasty refresh stuff from netscape. It should * perhaps be a servlet. */public class ThreadStatFrame extends HTTPFrame { protected static Integer REFRESH_DEFAULT = new Integer(5) ; /** * Attribute index - Our refresh interval. */ protected static int ATTR_REFRESH = -1 ; static { Attribute a = null ; Class cls = null ; try { cls = Class.forName("org.w3c.jigsaw.status.ThreadStatFrame"); } catch (Exception ex) { ex.printStackTrace() ; System.exit(1) ; } // The refresh interval attribute: a = new IntegerAttribute("refresh" , new Integer(5) , Attribute.EDITABLE) ; ATTR_REFRESH = AttributeRegistry.registerAttribute(cls, a) ; } Runtime runtime = null ; public void registerResource(FramedResource resource) { super.registerOtherResource(resource); } /** * Dump the currenr threads into an HTML page. * @param request The request we are to reply to. */ public Reply listThreads (Request request) { // enumerate all thread, and return a full thread listing: int tcount = Thread.activeCount() ; HtmlGenerator g = new HtmlGenerator ("Thread status") ; g.meta ("Refresh", getValue(ATTR_REFRESH, REFRESH_DEFAULT).toString()); addStyleSheet(g); // Dump thread informations: Thread tarray[] = new Thread[tcount] ; Thread.enumerate (tarray) ; g.append ("<h1>Thread dump</h1>") ; g.append ("<ul>") ; String rname = getResource().getIdentifier(); for (int i = 0 ; i < tcount ; i++) { String name = tarray[i].getName() ; g.append ("<li>" + "<a href=\""+rname+"?" + name + "\">" + name + "</a>" + (tarray[i].isDaemon() ? "D " : " ") + (tarray[i].isAlive() ? "R " : " ") + " Prio: " +(tarray[i].getPriority())) ; } g.append ("</ul>") ; // Dark features: g.append ("<p>To kill a thread, add a <b>?</b><em>thread-name</em> " + "to the current URL.</p>") ; // Add global java process informations: g.append ("<h2>Misc informations</h2>") ; g.append ("<p>Total free memory: " + runtime.freeMemory()); g.append ("<p>Toal memory : " + runtime.totalMemory()) ; g.close() ; // Reply back: Reply reply = request.makeReply(HTTP.OK) ; reply.setStream (g) ; return reply ; } protected Reply dumpThread (Request request) throws HTTPException { // enumerate all thread, and return a full thread listing: int tcount = Thread.activeCount() ; Thread tarray[] = new Thread[tcount] ; Thread.enumerate (tarray) ; // Find ZE thread String tname = request.getQueryString () ; Thread queried = null ; for (int i = 0 ; i < tcount ; i++) { if ( tarray[i].getName().equals (tname) ) { queried = tarray[i] ; break ; } } if ( queried == null ) { Reply reply = request.makeReply(HTTP.NOT_FOUND); reply.setContent ("Thread " + tname + " not found.") ; return reply ; } // Default to killing the thread queried.destroy() ; return listThreads (request) ; } /** * Get the threads. * If a search string is present, kill the indicated thread, otherwise * list the currently running threads. * @param request The request to handle. * @exception HTTPException If processing the request failed. */ public Reply get (Request request) throws HTTPException { if ( request.hasQueryString() ) { return dumpThread (request) ; } else { return listThreads (request) ; } } /** * Initialize the thread lister. * Just get a pointer to our runtime object. * @param values The default attribute values. */ public void initialize(Object values[]) { super.initialize(values) ; runtime = Runtime.getRuntime() ; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?