zoukankan      html  css  js  c++  java
  • 线程组

    一、

    public class Main {
        public static void main(String[] args) {
            System.out.println("main thread: " + Thread.currentThread().getName());// 主线程组名称,输出:main
            ThreadGroup tGroup = new ThreadGroup("hahaTGroupName");
            System.out.println("custom thread: " + tGroup.getName());// 自定义线程组名称,输出:hahaTGroupName
            MyThread mThread = new MyThread();
            // 创建5个线程,并将该线程放入自定义线程组
            for (int i = 0; i < 5; i++) {
                Thread thread = new Thread(tGroup, mThread);// 这东东的构造方法超多
                thread.start();
            }
            System.out.println("嘻嘻");
            // 求出tGroup所拥有的线程数
            System.out.println("active count: " + tGroup.activeCount());
            // 列出tGroup里面有什么线程
            tGroup.list();// 卧槽,不用打印的,就这个方法,就打印出来了
        }
    }
    
    class MyThread implements Runnable {
        @Override
        public void run() {
            try {
                System.out.println("thread name: " + Thread.currentThread().getName());
                TimeUnit.SECONDS.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    二、

    /*
     * 批量终止线程组内的线程
     */
    public class Main2 extends Thread {
        
        public Main2(ThreadGroup tg, String name) {
            super(tg, name);
        }
    
        public void run() {
            System.out.println("ThreadName = " + Thread.currentThread().getName() + "准备开始死循环了");
            while (!this.isInterrupted()) {
                System.out.println(Thread.currentThread().getName() + "死循环中");
            }
            System.out.println("ThreadName = " + Thread.currentThread().getName() + "结束了");
        }
    
        public static void main(String[] args) throws InterruptedException {
            ThreadGroup tg = new ThreadGroup("我的线程组");
            Main2 mt = null;
            for (int i = 0; i < 3; i++) {
                mt = new Main2(tg, "线程" + i);
                mt.start();
            }
            Thread.sleep(2000);
            tg.interrupt();
            System.out.println("调用了interrupt()方法");
        }
    }

    三、

    public class Main3 {
        public static void main(String[] args) {
            /*
             * 从结果看,实例化了一个group出来,没有指定线程组,那么自动归到当前线程所属的线程组中,也就是隐式地在一个线程组中添加了一个子线程组。
             */
            System.out.println("主线程名称:" + Thread.currentThread().getName()); 
            System.out.println("主线程所属的线程组名称:" + Thread.currentThread().getThreadGroup().getName());
            System.out.println("主线程所属的线程组里面有多少线程组:" + Thread.currentThread().getThreadGroup().activeGroupCount());
            ThreadGroup group = new ThreadGroup("新的组");
            System.out.println("主线程名称:" + Thread.currentThread().getName()); 
            System.out.println("主线程所属的线程组名称:" + Thread.currentThread().getThreadGroup().getName());
            System.out.println("主线程所属的线程组里面有多少线程组:" + Thread.currentThread().getThreadGroup().activeGroupCount());
            ThreadGroup[] tg = new ThreadGroup[Thread.currentThread().getThreadGroup().activeGroupCount()];
            Thread.currentThread().getThreadGroup().enumerate(tg);
            for (int i = 0; i < tg.length; i++)
                System.out.println("第一个线程组名称为:" + tg[i].getName());
            
            /*
             * 1、根线程组就是系统线程组system
             * 2、抛空指针异常是因为系统线程组上已经没有线程组了,所以system的getParent()方法返回的是null,对null调用getName()方法自然是NullPointerException
             */
            System.out.println(Thread.currentThread().getThreadGroup().getParent().getName());
            System.out.println(Thread.currentThread().getThreadGroup().getParent().getParent().getName());
        }
    }

    END:

  • 相关阅读:
    java基础
    JAVASE 安装步骤
    MySQL 45道练习题
    MySQL 多表查询
    2018-08-07JDBC连接MySQL+增删改表格+SQL注入问题及其预处理对象PreparedStatement解决方案
    2018-08-06Java中的异常捕获和Throw详细细节
    2018-08-03List接口方法+LinkedList方法+Vector集合+Set接口下HashSet和LinkedHashSet集合+HashCode()+equals()方法对于Set接口判断重复的详细细节
    2018-08-01集合Collection+Iterator迭代器+泛型+增强For循环
    2018-07-31包装类与基本数据类型String的转换+System类详细知识+Arrays类+大数据(BigInteger+BigDecimal)运算
    2018-07-27Final+Static+匿名对象+3中代码块
  • 原文地址:https://www.cnblogs.com/ericguoxiaofeng/p/9202562.html
Copyright © 2011-2022 走看看