zoukankan      html  css  js  c++  java
  • java查看当前项目所有线程列表界面【转】

    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;  
        }  
    }     
    View Code

     

    4运行前后比对

    运行前界面

     

    运行后界面

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

  • 相关阅读:
    oracle之sqlplus讲解
    oracle数据库--启动和关闭
    linux下使用SSL代理(SSLedge)
    Titanium系列--利用js动态获取当前时间
    Titanium系列--利用Titanium开发android App实战总结
    Titanium系列--我常用的Titanium的快捷键(持续更新中。。)
    Titanium系列--安装Titanium Studio 中的Android SDK,JDK以及环境变量的配置(二)
    Titanium系列--Titanium的简介、Titanium Studio安装和配置(一)
    Happymenu新的开始
    对IEnumerable<T>和IQueryable<T>的一点见解
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/5653788.html
Copyright © 2011-2022 走看看