Android(java)学习笔记73:线程组的概述和使用

Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。

(1)默认情况下,所有的线程都属于主线程组。 public final ThreadGroup getThreadGroup()

(2)我们也可以给线程设置分组 Thread(ThreadGroup group, Runnable target, String name)

下面我根据代码来实现:

 1 package cn.itcast_06;
 2
 3 public class MyRunnable implements Runnable {
 4
 5     @Override
 6     public void run() {
 7         for (int x = 0; x < 100; x++) {
 8             System.out.println(Thread.currentThread().getName() + ":" + x);
 9         }
10     }
11
12 }
 1 package cn.itcast_06;
 2
 3 /*
 4  * 线程组: 把多个线程组合到一起。
 5  * 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
 6  */
 7 public class ThreadGroupDemo {
 8     public static void main(String[] args) {
14         MyRunnable my = new MyRunnable();
15         Thread t1 = new Thread(my, "林青霞");
16         Thread t2 = new Thread(my, "刘意");
17         // 我不知道他们属于那个线程组,我想知道,怎么办
18         // 线程类里面的方法:public final ThreadGroup getThreadGroup()
19         ThreadGroup tg1 = t1.getThreadGroup();
20         ThreadGroup tg2 = t2.getThreadGroup();
21         // 线程组里面的方法:public final String getName()
22         String name1 = tg1.getName();
23         String name2 = tg2.getName();
24         System.out.println(name1);
25         System.out.println(name2);
26         // 通过结果我们知道了:线程默认情况下属于main线程组
27         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
28         System.out.println(Thread.currentThread().getThreadGroup().getName());           //t1.start();           //t1.start();      }  }               

输出结果是:

当然现实生活中我们要自定义线程组,所有接下来我们讲解自定义线程组

这里我们不得不说自定义线程组的逻辑如下:

(1)创建一个线程组

(2)创建其他线程的时候,把其他线程的组指定为我们自己新建的线程组

 1 package cn.itcast_06;
 2
 3 public class MyRunnable implements Runnable {
 4
 5     @Override
 6     public void run() {
 7         for (int x = 0; x < 100; x++) {
 8             System.out.println(Thread.currentThread().getName() + ":" + x);
 9         }
10     }
11
12 }
 1 package cn.itcast_06;
 2
 3 /*
 4  * 线程组: 把多个线程组合到一起。
 5  * 它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
 6  */
 7 public class ThreadGroupDemo {
 8     public static void main(String[] args) {
 9         // method1();
10
11         // 我们如何修改线程所在的组呢?
12         // 创建一个线程组
13         // 创建其他线程的时候,把其他线程的组指定为我们自己新建线程组
14         method2();
15
16         // t1.start();
17         // t2.start();
18     }
19
20     private static void method2() {
21         // ThreadGroup(String name)
22         ThreadGroup tg = new ThreadGroup("这是一个新的组");
23
24         MyRunnable my = new MyRunnable();
25         // Thread(ThreadGroup group, Runnable target, String name),指定t1和t2为线程组tg
26         Thread t1 = new Thread(tg, my, "林青霞");
27         Thread t2 = new Thread(tg, my, "刘意");
28
29         System.out.println(t1.getThreadGroup().getName());
30         System.out.println(t2.getThreadGroup().getName());
31
32         //通过组名称设置后台线程,表示该组的线程都是后台线程,这里可以直接设置线程组,就可以设置线程组中的所有的线程
33         tg.setDaemon(true);
34     }
35
36     private static void method1() {
37         MyRunnable my = new MyRunnable();
38         Thread t1 = new Thread(my, "林青霞");
39         Thread t2 = new Thread(my, "刘意");
40         // 我不知道他们属于那个线程组,我想知道,怎么办
41         // 线程类里面的方法:public final ThreadGroup getThreadGroup()
42         ThreadGroup tg1 = t1.getThreadGroup();
43         ThreadGroup tg2 = t2.getThreadGroup();
44         // 线程组里面的方法:public final String getName()
45         String name1 = tg1.getName();
46         String name2 = tg2.getName();
47         System.out.println(name1);
48         System.out.println(name2);
49         // 通过结果我们知道了:线程默认情况下属于main线程组
50         // 通过下面的测试,你应该能够看到,默任情况下,所有的线程都属于同一个组
51         System.out.println(Thread.currentThread().getThreadGroup().getName());
52     }
53 }
时间: 2024-12-21 00:46:49

Android(java)学习笔记73:线程组的概述和使用的相关文章

java学习笔记14--多线程编程基础1

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为一个进程,例如:用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 进程要占用相当一部分处理器时间和内存资源 进程具有独立的内存空间 通信很不方便,编程模型比较复杂 多线程 一个程序中多段代码同时并发执行,称为多线程,线程比进程开销小,协作和数据交换容易

java学习笔记15--多线程编程基础2

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡的过程 一个线程在任何时刻都处于某种线程状态(thread state) 线程生命周期状态图 诞生状态 线程刚刚被创建 就绪状态 线程的 start 方法已被执行 线程已准备好运行 运行状态 处理机分配给了线程,线程正在运行 阻塞状态(Blocked) 在线程发出输入/输出请求且必须等待其返回 遇到

java学习笔记之线程(一)

线程(一) 一.线程定义于组成: 1.创建任务和线程: 1 TaskThread task = new TaskThread(); // 创建任务 2 Thread taskThread = new Thread(task); // 根据任务创建对应的执行线程 2.任务 ,实现Runnable 接口 Override run()方法 1 class TaskThread implements Runnable{ 2 ... 3 public void run(){ 4 //执行体 ,告诉系统如何

Java学习笔记: 线程的创建

多线程 概念:多线程能够将任务放在不同的线程当中同时处理,可以有效的提高系统的资源使用,尤其针对多处理器对应用的提升更大. 实现理念:把要进行处理的业务逻辑单元放在一个类当中,对于主线程而言就是创建这些类的对象,然后把每个对象作为一个线程进行启动,当中也涉及到多个线程的通信. 实现方法: 一 通过实现Runnable接口 1 构建运行线程的类,该类需要实现Runnable接口,因此需要在该类的定义过程中实现run()方法,这个方法体的内容也就是线程的业务逻辑实现代码 2 创建线程对象 Threa

JAVA学习笔记(一)--01--JAVA概述

1.命令行方式 (1)打开DOS窗口方式:  a:开始-运行-输入cmd回车  b:快捷键 windos图标键盘+R-输入cmd回车 (2)常用的DOS命令  a:盘符切换  盘符: 然后回车  b:列出当前目录下的文件以及文件夹  dir 然后回车  c:创建目录(文件夹) 了解  md 目录名称  d:删除目录了解  rd 目录名称  e:进入指定目录  单级目录  cd 目录名称  多级目录  cd 多级目录名称,目录间用\隔开的  f:回退指定目录  单级目录  cd ..  多级目录 

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

java/android 设计模式学习笔记(9)---代理模式

这篇博客我们来介绍一下代理模式(Proxy Pattern),代理模式也成为委托模式,是一个非常重要的设计模式,不少设计模式也都会有代理模式的影子.代理在我们日常生活中也很常见,比如上网时连接的代理服务器地址,更比如我们平时租房子,将找房子的过程代理给中介等等,都是代理模式在日常生活中的使用例子. 代理模式中的代理对象能够连接任何事物:一个网络连接,一个占用很多内存的大对象,一个文件,或者是一些复制起来代价很高甚至根本不可能复制的一些资源.总之,代理是一个由客户端调用去访问幕后真正服务的包装对象

java/android 设计模式学习笔记(16)---命令模式

这篇博客我们来介绍一下命令模式(Command Pattern),它是行为型设计模式之一.命令模式相对于其他的设计模式更为灵活多变,我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击关机命令,系统就会执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然后结束程序进程,最后调用内核命令关闭计算机等,对于这一系列的命令,用户不用去管,用户只需点击系统的关机按钮即可完成如上一系列的命令.而我们的命令模式其实也与之相同,将一系列的方法调用封装,用户只需调用一个方法执行,那