zoukankan      html  css  js  c++  java
  • java 多线程 五、线程组

    线程组的概述和使用
    * A:线程组概述
    * Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
    * 默认情况下,所有的线程都属于主线程组。
    * public final ThreadGroup getThreadGroup()//通过线程对象获取他所属于的组
    * public final String getName()//通过线程组对象获取他组的名字
    * 我们也可以给线程设置分组
    * 1,ThreadGroup(String name) 创建线程组对象并给其赋值名字
    * 2,创建线程对象
    * 3,Thread(ThreadGroup?group, Runnable?target, String?name)
    * 4,设置整组的优先级或者守护线程
    * B:案例演示
    * 线程组的使用,默认是主线程组
    *
    MyRunnable mr = new MyRunnable();
    Thread t1 = new Thread(mr, "张三");
    Thread t2 = new Thread(mr, "李四");
    //获取线程组
    // 线程类里面的方法:public final ThreadGroup getThreadGroup()
    ThreadGroup tg1 = t1.getThreadGroup();
    ThreadGroup tg2 = t2.getThreadGroup();
    // 线程组里面的方法:public final String getName()
    String name1 = tg1.getName();
    String name2 = tg2.getName();
    System.out.println(name1);
    System.out.println(name2);
    // 通过结果我们知道了:线程默认情况下属于main线程组
    // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
    System.out.println(Thread.currentThread().getThreadGroup().getName());

    * 自己设定线程组
    *
    // ThreadGroup(String name)
    ThreadGroup tg = new ThreadGroup("这是一个新的组");

    MyRunnable mr = new MyRunnable();
    // Thread(ThreadGroup group, Runnable target, String name)
    Thread t1 = new Thread(tg, mr, "张三");
    Thread t2 = new Thread(tg, mr, "李四");

    System.out.println(t1.getThreadGroup().getName());
    System.out.println(t2.getThreadGroup().getName());

    //通过组名称设置后台线程,表示该组的线程都是后台线程
    tg.setDaemon(true);

     

        /**
         * @param args
         * ThreadGroup
         */
        public static void main(String[] args) {
            //demo1();
            ThreadGroup tg = new ThreadGroup("我是一个新的线程组");        //创建新的线程组
            MyRunnable mr = new MyRunnable();                        //创建Runnable的子类对象
            
            Thread t1 = new Thread(tg, mr, "张三");                    //将线程t1放在组中
            Thread t2 = new Thread(tg, mr, "李四");                    //将线程t2放在组中
            
            System.out.println(t1.getThreadGroup().getName());        //获取组名
            System.out.println(t2.getThreadGroup().getName());
            
            tg.setDaemon(true);
        }
    
        public static void demo1() {
            MyRunnable mr = new MyRunnable();
            Thread t1 = new Thread(mr, "张三");
            Thread t2 = new Thread(mr, "李四");
            
            ThreadGroup tg1 = t1.getThreadGroup();
            ThreadGroup tg2 = t2.getThreadGroup();
            
            System.out.println(tg1.getName());                //默认的是主线程
            System.out.println(tg2.getName());
        }
    
    }
    
    class MyRunnable implements Runnable {
    
        @Override
        public void run() {
            for(int i = 0; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName() + "...." + i);
            }
        }
        
    }
  • 相关阅读:
    cf-779E (拆位)
    石子游戏 (SG函数)
    [POI2017] Flappy Bird (思维题)
    Alice and Bob (SG函数)
    Red is good (DP)
    CodeVS-1669 (背包问题)
    GalaxyOJ-468 (LCA)
    BZOJ-1191 (二分图匹配)
    Reinforcement Learning 笔记(4)
    Reinforcement Learning 笔记(3)
  • 原文地址:https://www.cnblogs.com/yimian/p/6568244.html
Copyright © 2011-2022 走看看