1.线程的命名

1.1线程的默认命名

  1. Thread()
  2. Thread(Runnable target)
  3. Thread(Thread Group group Runnable target)

打开JDK的源码会看到下面的代码:
image.png

1.2.命名线程

  1. Thread(Runnable target, String name)
  2. Thread(String name)
  3. Thread(Thread Group group Runnable target String name)
  4. Thread(Thread Group group Runnable target String name long stackSize)
  5. Thread(Thread Group group String name)

image.png

1.3 修改线程名称

Thread的setName源码:
image.png

2.线程的父子关系

  1. 一个线程的创建肯定是由另一个线程完成的。
  2. 被创建线程的父线程是创建它的线程

3.Thread 与 ThreadGroup

样例代码:
image.png

  1. main线程所在的Thread Group称为main
  2. 构造一个线程的时候如果没有显式地指定Thread Group 那么它将会和父线程同属于一个Thread Group

4.Thread 与 Runnable

Thread负责线程本身相关的职责和控制,Runnable则负责逻辑执行单元的部分

5.Thread与JVM虚拟机栈

5.1Thread与Stacksize

一般情况下, 创建线程的时候不会手动指定栈内存的地址空间字节数组, 统一通过xss参数进行设置即可, 通过上面这段官网文档的描述, 我们不难发现stacksize越大则代表着正在线程内方法调用递归的深度就越深, stacksize越小则代表着创建的线程数量越多, 当然了这个参数对平台的依赖性比较高,比如不同的操作系统、不同的硬件。

5.2JVM内存结构

image.png

6.守护线程

6.1什么是守护线程

image.png
设置守护线程的方法很简单, 调用set Daemon方法即可, true代表守护线程, false代表正常线程。线程是否为守护线程和它的父线程有很大的关系,如果父线程是正常线程,则子线程也是正常线程, 反之亦然, 如果你想要修改它的特性则可以借助set Daemon方法。is Daemon方法可以判断该线程是不是守护线程。另外需要注意的就是, set Daemon方法只在线程启动之前才能生效, 如果一个线程已经死亡, 那么再设置set Daemon则会抛出Illegal Thread State Exception异常。

6.2 守护线程的作用

守护线程经常用作与执行一些后台任务,因此有时它也被称为后台线程,当你希望关闭某些线程的时候, 或者退出JVM进程的时候, 一些线程能够自动关闭, 此时就可以考虑用守护线程为你完成这样的工作。