java查看当前项目所有线程列表界面

1.TestThread(测试类)

package com.testdemo.pcis.isc.job.king.panel;

public class TestThread {
public static void main(String[] args) {
new Thread(){
public void run() {
try {
Thread.currentThread().sleep(10*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); new Thread(){
public void run() {
try {
Thread.currentThread().sleep(20*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); new Thread(){
public void run() {
try {
Thread.currentThread().sleep(30*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start(); ThreadViewer.showThreads();
}
}

2.ThreadViewer(线程视图启动类)

package com.testdemo.pcis.isc.job.king.panel;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class ThreadViewer extends JPanel {
private ThreadViewerTableModel tableModel;
public ThreadViewer() {
tableModel = new ThreadViewerTableModel();
JTable table = new JTable(tableModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
TableColumnModel colModel = table.getColumnModel();
int numColumns = colModel.getColumnCount();
// manually size all but the last column
for ( int i = 0; i < numColumns - 1; i++ ) {
TableColumn col = colModel.getColumn(i);
col.sizeWidthToFit();
col.setPreferredWidth(col.getWidth() + 5);
col.setMaxWidth(col.getWidth() + 5);
}
JScrollPane sp = new JScrollPane(table);
setLayout(new BorderLayout());
add(sp, BorderLayout.CENTER);
}
public void dispose() {
tableModel.stopRequest();
}
protected void finalize() throws Throwable {
dispose();
}
public static JFrame createFramedInstance() {
final ThreadViewer viewer = new ThreadViewer();
final JFrame f = new JFrame("ThreadViewer");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
f.setVisible(false);
f.dispose();
viewer.dispose();
}
});
f.setContentPane(viewer);
f.setSize(500, 300);
f.setVisible(true);
return f;
} public static void showThreads() {
JFrame f = ThreadViewer.createFramedInstance();
// For this example, exit the VM when the viewer
// frame is closed.
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// Keep the main thread from exiting by blocking
// on wait() for a notification that never comes.
Object lock = new Object();
synchronized ( lock ) {
try {
lock.wait();
} catch ( InterruptedException x ) {
}
}
} public static void main(String[] args) {
showThreads();
}
}

3.ThreadViewerTableModel(线程视图编织类)

package com.isoftstone.pcis.isc.job.king.panel;
import java.awt.*;
import java.lang.reflect.*;
import javax.swing.*;
import javax.swing.table.*;
public class ThreadViewerTableModel extends AbstractTableModel {
private Object dataLock;
private int rowCount;
private Object[][] cellData;
private Object[][] pendingCellData;
// the column information remains constant
private final int columnCount;
private final String[] columnName;
private final Class[] columnClass;
// self-running object control variables
private Thread internalThread;
private volatile boolean noStopRequested;
public ThreadViewerTableModel() {
rowCount = 0;
cellData = new Object[0][0];
// JTable uses this information for the column headers
String[] names = {
"Priority", "Alive",
"Daemon", "Interrupted",
"ThreadGroup", "Thread Name" };
columnName = names; // JTable uses this information for cell rendering
Class[] classes = {
Integer.class, Boolean.class,
Boolean.class, Boolean.class,
String.class, String.class };
columnClass = classes;
columnCount = columnName.length;
// used to control concurrent access
dataLock = new Object();
noStopRequested = true;
Runnable r = new Runnable() {
public void run() {
try {
runWork();
} catch ( Exception x ) {
// in case ANY exception slips through
x.printStackTrace();
}
}
};
internalThread = new Thread(r, "ThreadViewer");
internalThread.setPriority(Thread.MAX_PRIORITY - 2);
internalThread.setDaemon(true);
internalThread.start();
}
private void runWork() {
// The run() method of transferPending is called by
// the event handling thread for safe concurrency.
Runnable transferPending = new Runnable() {
public void run() {
transferPendingCellData();
// Method of AbstractTableModel that
// causes the table to be updated.
fireTableDataChanged();
}
};
while ( noStopRequested ) {
try {
createPendingCellData();
SwingUtilities.invokeAndWait(transferPending);
Thread.sleep(2000);
} catch ( InvocationTargetException tx ) {
tx.printStackTrace();
stopRequest();
} catch ( InterruptedException x ) {
Thread.currentThread().interrupt();
}
}
}
public void stopRequest() {
noStopRequested = false;
internalThread.interrupt();
}
public boolean isAlive() {
return internalThread.isAlive();
}
private void createPendingCellData() {
// this method is called by the internal thread
Thread[] thread = findAllThreads();
Object[][] cell = new Object[thread.length][columnCount];
for ( int i = 0; i < thread.length; i++ ) {
Thread t = thread[i];
Object[] rowCell = cell[i];
rowCell[0] = new Integer(t.getPriority());
rowCell[1] = new Boolean(t.isAlive());
rowCell[2] = new Boolean(t.isDaemon());
rowCell[3] = new Boolean(t.isInterrupted());
rowCell[4] = t.getThreadGroup().getName();
rowCell[5] = t.getName();
}
synchronized ( dataLock ) {
pendingCellData = cell;
}
}
private void transferPendingCellData() {
// this method is called by the event thread
synchronized ( dataLock ) {
cellData = pendingCellData;
rowCount = cellData.length;
}
}
public int getRowCount() {
// this method is called by the event thread
return rowCount;
} public Object getValueAt(int row, int col) {
// this method is called by the event thread
return cellData[row][col];
}
public int getColumnCount() {
return columnCount;
}
public Class getColumnClass(int columnIdx) {
return columnClass[columnIdx];
}
public String getColumnName(int columnIdx) {
return columnName[columnIdx];
}
public static Thread[] findAllThreads() {
ThreadGroup group =
Thread.currentThread().getThreadGroup();
ThreadGroup topGroup = group;
// traverse the ThreadGroup tree to the top
while ( group != null ) {
topGroup = group;
group = group.getParent();
}
// Create a destination array that is about
// twice as big as needed to be very confident
// that none are clipped.
int estimatedSize = topGroup.activeCount() * 2;
Thread[] slackList = new Thread[estimatedSize];
// Load the thread references into the oversized
// array. The actual number of threads loaded
// is returned.
int actualSize = topGroup.enumerate(slackList);
// copy into a list that is the exact size
Thread[] list = new Thread[actualSize];
System.arraycopy(slackList, 0, list, 0, actualSize);
return list;
}
}

4运行前后比对

运行前界面

运行后界面

http://blog.csdn.net/daditao/article/details/19811669

java查看当前项目所有线程列表界面的更多相关文章

  1. java查看当前项目所有线程列表界面【转】

    java查看当前项目所有线程列表界面 1.TestThread(测试类) package com.testdemo.pcis.isc.job.king.panel; public class Test ...

  2. java查看本机hostName可代表的ip列表

    java查看本机hostName可代表的ip列表 import java.net.InetAddress; public class ent { public static void main(Str ...

  3. java查看本机hostName可代表的ip列表【转】

    java查看本机hostName可代表的ip列表 import java.net.InetAddress; public class ent { public static void main(Str ...

  4. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

  5. Java程序设计基础项目总结报告

    Java程序设计基础项目总结报告 20135313吴子怡 一.项目内容 运用所学Java知识,不调用Java类库,实现密码学相关算法的设计,并完成TDD测试,设计运行界面. 二.具体任务 1.要求实现 ...

  6. (转)关于java和web项目中的相对路径问题

    原文:http://blog.csdn.net/yethyeth/article/details/1623283 关于java和web项目中的相对路径问题 分类: java 2007-05-23 22 ...

  7. Java概述和项目演示

    Java概述和项目演示 1. 软件开发学习方法 多敲 多思考 解决问题 技术文档阅读(中文,英文) 项目文档 多阅读源码 2. 计算机 简称电脑,执行一系列指令的电子设备 3. 硬件组成 输入设备:键 ...

  8. Java知多少(88)列表和组合框

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...

  9. Java知多少(89)列表和组合框

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...

随机推荐

  1. Netbeans导入Nutch1.2

    Windows 环境下,Netbeans下导入Nutch1.2. 测试环境:  Nutch 1.2  Netbean7.4  Java 1.8.0_20  cygwin 安装步骤: 1.安装: ...

  2. IE10中session失效取不到值的问题

    在eworkflow工作流,ebiao报表,eform自定义表单产品升级到IE10的时候,系统登录后,总是会取不到session中的值. for j2ee版本和for dotnet版本都一样取不到值. ...

  3. sencha touch百度地图扩展

    扩展代码如下: Ext.define('ux.BMap', { alternateClassName: 'bMap', extend: 'Ext.Container', xtype: 'bMap', ...

  4. NOIP2008 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  5. MySQL学习(一)

    mysql left join,right join,inner join用法分析 left join:是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句 ...

  6. ReactJS学习笔记(三)

    需要注意的问题: 1.组件名称开头字母一定要大写.(PS:原因是 React 的 JSX 里约定分别使用首字母大.小写来区分本地组件的类和 HTML 标签.) 2.this.props.childre ...

  7. Android IOS WebRTC 音视频开发总结(八十二)-- VP8对VP9,质量还是码率?

    本文主要介绍VP9(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blacke ...

  8. SQL Server提高事务复制效率优化(三)订阅初始化优化

    初始化订阅主要是由分发代理分发和应用快照代理之前生成的快照,所以优化的主体是分发代理. 1.初始化订阅 首先在本地创建一个订阅,发布服务器.分发服务器和订阅服务器都在同一台服务器上,仅为了测试生产环境 ...

  9. ue4框架C++语法汇总文章

    1.Run external .exe file TCHAR* url = TEXT("C:\\windows\\system32\\calc.exe"); FPlatformPr ...

  10. UE4.11新特性:胶囊体阴影

    官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...