zoukankan      html  css  js  c++  java
  • java监控多个线程的实现

    场景:需要启动多线程处理事情,而在所有事情做完之后,需要修改系统状态;那么如何判断所有线程(事情)都做完了呢?这就需要判断所有当前运行的线程状态了。
    代码
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;

    /** 测试监控类 */
    public class WatchThread {

        
    /** 测试函数 */
        
    public void testThread() throws InterruptedException {
            
    int threadNum = 10;
            
    // 初始化countDown
            CountDownLatch threadSignal = new CountDownLatch(threadNum);
            
    // 创建固定长度的线程池
            Executor executor = Executors.newFixedThreadPool(threadNum);
            
    for (int i = 0; i < threadNum; i++) { // 开threadNum个线程
                Runnable task = new TestThread(threadSignal);
                
    // 执行
                executor.execute(task);
            }
            threadSignal.await(); 
    // 等待所有子线程执行完
            
    // do work
            System.out.println(Thread.currentThread().getName() + "+++++++结束.");
        }

        
    /** 测试函数 */
        
    public static void main(String[] args) throws InterruptedException {
            WatchThread test 
    = new WatchThread();
            test.testThread();
        }

        private class TestThread implements Runnable {
            
    private CountDownLatch threadsSignal;

            
    public TestThread(CountDownLatch threadsSignal) {
                
    this.threadsSignal = threadsSignal;
            }

            
    public void run() {
                System.out.println(Thread.currentThread().getName() 
    + "开始...");
                
    // do shomething
                System.out.println("开始了线程::::" + threadsSignal.getCount());
                
    // 线程结束时计数器减1
                threadsSignal.countDown();
                System.out.println(Thread.currentThread().getName() 
    + "结束. 还有"
                        
    + threadsSignal.getCount() + " 个线程");
            }
        }

    }
  • 相关阅读:
    成立仅8个月的个人网站,月收入几十万美金
    Dynamics AX Bitmap to Image File
    孤儿药与长尾商品的网络营销
    How to control printer orientation(Landscape / Portrait) for an AX report in X++
    长城坑爹宽带,劫持用户DNS赚取购物返利
    2014年最大福利:185个Google排名因素!免费电子书下载
    火狐用户评价
    冲刺5
    《构建之法》阅读笔记03
    冲刺4
  • 原文地址:https://www.cnblogs.com/MyFavorite/p/1852567.html
Copyright © 2011-2022 走看看