Thread 简述
- public class Thread extends Object implements Runnable
- 线程是程序中的执行线程,Java 虚拟机允许应用程序并发地运行多个执行线程。
- 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。
- 创建新执行线程常规的有两种方法。一种方法是将类声明为 Thread 的子类,该子类重写 Thread 类的 run 方法。另一种方法是声明实现 Runnable 接口的类,该类然后实现 run 方法。具体可以参考《Java 线程基础篇》
- 每个线程都有一个标识名,多个线程可以同名,如果线程创建时没有指定标识名,就会为其生成一个新名称。
守护线程 VS 非守护线程
1. Java 将线程分为守护线程与非守护线程
2. 一条守护线程扮演着非守护线程辅助者的角色,并且会在应用程序最后一条非守护线程消失之后自动死亡,因此应用程序才能终止
非守护线程
1. 非守护线程也叫用户线程,包括常规的用户线程(如main主线程),以及用于处理GUI事件的事件调度线程,Java虚拟机在它所有非守护线程已经离开后自动离开。
2、开启的线程默认都是非守护线程
守护线程
1. 守护线程则是用来服务用户线程的,比如说GC线程。
2. 如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去,于是会自动结束。
3、public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程,为true则表示守护线程;当正在运行的线程都是守护线程时,Java 虚拟机退出;该方法必须在启动线程前调用,但是使用线程池时,可以在run方法或者call方法中调用。