• 《Java多线程编程核心技术》读后感(十六)


     

     

    线程组

    线程组的作用是,可以批量的管理线程或线程组对象,有效地对线程或线程组对象进行组织

    线程对象关联线程组:1级关联

    package Seven;
    
    public class ThreadA  extends Thread {
    
        @Override
        public void run() {
            try {
                while (!Thread.currentThread().isInterrupted()) {
                    System.out.println("ThreadName=" + Thread.currentThread().getName());
                    Thread.sleep(3000);
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    package Seven;
    
    public class ThreadB extends Thread {
    
        @Override
        public void run() {
            try {
                while (!Thread.currentThread().isInterrupted()) {
                    System.out.println("ThreadName=" + Thread.currentThread().getName());
                    Thread.sleep(3000);
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    package Seven;
    
    public class Run {
        public static void main(String[] args) {
            ThreadA aRunnable = new ThreadA();
            ThreadB bRunnable = new ThreadB();
    
            ThreadGroup group = new ThreadGroup("高洪岩的线程组");
    
            Thread aThread = new Thread(group, aRunnable);
            Thread bThread = new Thread(group, bRunnable);
            aThread.start();
            bThread.start();
    
            System.out.println("活动的线程数为:" + group.activeCount());
            System.out.println("线程组的名称为:" + group.getName());
    
        }
    }

     线程对象关联线程组:多级关联

    package Seven;
    
    public class Run {
        public static void main(String[] args) {
    
            // 在main组中添加一个线程组A,然后在这个A组中添加线程对象Z
            // 方法activeGroupCount()和activeCount()的值不是固定的
            // 是系统中环境的一个快照
            ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
            ThreadGroup group = new ThreadGroup(mainGroup, "A");
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println("runMethod!");
                        Thread.sleep(10000);// 线程必须在运行状态才可以受组管理
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            };
    
            Thread newThread = new Thread(group, runnable);
            newThread.setName("Z");
            newThread.start();// 线程必须启动然后才归到组A中
            // ///
            ThreadGroup[] listGroup = new ThreadGroup[Thread.currentThread()
                    .getThreadGroup().activeGroupCount()];
            Thread.currentThread().getThreadGroup().enumerate(listGroup);
            System.out.println("main线程中有多少个子线程组:" + listGroup.length + " 名字为:"
                    + listGroup[0].getName());
            Thread[] listThread = new Thread[listGroup[0].activeCount()];
            listGroup[0].enumerate(listThread);
            System.out.println(listThread[0].getName());
    
        }
    }

    线程组自动归属特性

    自动归属就是自动归到当前线程组中

    package Seven;
    
    public class Run {
        public static void main(String[] args) {
            System.out.println("A处线程:"+Thread.currentThread().getName()
                    + " 所属的线程组名为:"
                    + Thread.currentThread().getThreadGroup().getName()+ " "
                    + " 中有线程组数量:"+Thread.currentThread().getThreadGroup().activeGroupCount());
            ThreadGroup group=new ThreadGroup("新的组");
            System.out.println("B处线程:"+Thread.currentThread().getName()
                    + " 所属的线程组名为:"
                    + Thread.currentThread().getThreadGroup().getName()+ " "
                    +" 中有线程组数量:"+Thread.currentThread().getThreadGroup().activeGroupCount());
            ThreadGroup[] threadGroup=new ThreadGroup[Thread.currentThread().getThreadGroup().activeGroupCount()];
            Thread.currentThread().getThreadGroup().enumerate(threadGroup);
            for (int i = 0; i < threadGroup.length; i++) {
                System.out.println("第一个线程组名称为:"+threadGroup[i].getName());
            }
        }
    }

    未完,待续。。。

  • 相关阅读:
    myeclipse 配置svn
    windows下 将tomcat做成服务,并于oracle后启动
    局部内部类为什么只能访问final局部变量,对于成员变量却可以随便访问?
    使用cmd查看windows端口占用情况,并关闭应用
    生成javadoc文档
    JNI以及JNA使用
    自定义标签-java
    dwr框架应用
    Hadoop生态圈简介
    tomcat之日志记录
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7860234.html
Copyright © 2020-2023  润新知