Java的 线程组 和 线程池
Java中的线程分两类:
- User Thread(用户线程)
- Daemon Thread(守护线程)
理解:
- 只要当前的JVM实例中存在一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程就随着JVM一起结束工作;
- 守护线程的作用就是为其他线程的运行提供便利服务,守护线程最典型的应用就是GC(垃圾回收站);
- 用户线程和守护线程区别:
- 如果用户线程已经全部退出运行了,只剩下守护线程,那JVM就退出了,因为没有了守护者,守护线程就没有什么工作了,也就没有继续运行程序的必要了。
线程组
-
介绍:
-
Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制;
-
默认情况下,所有的线程都属于主线程组;
-
public final ThreadGroup getThreadGroup() 通过线程对象获取它所属于的组;
-
public final String getName() 通过线程组对象获取组的名字;
-
可以给线程设置分组ThreadGroup(String name) 创建线程组对象并给其赋值名字。
-
Thread(ThreadGroup group,String name);
Thread(ThreadGroup group,Runnable target,String name);
-
作用就是对一批线程进行分类管理和控制。
-
-
举例:
package com.nara.test;
public class ThreadGroupTest {
public static void main(String[]args){
MyRunnable my=new MyRunnable();
//创建线程组
ThreadGroup tg=new ThreadGroup("创建的线程组A");
//创建两个线程
Thread t1=new Thread(tg,my,"nara");
Thread t2=new Thread(tg,my,"wd");
Thread t3=new Thread(my,"heihei");
//通过线程对象获取它所属于的组
System.out.println(t1.getThreadGroup());
//通过线程组对象获取组的名字
System.out.println(t2.getThreadGroup().getName());
//设置tg线程组的线程都为守护线程
tg.setDaemon(true);
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
for(int i=0;i<