Thread类是JVM用来管理线程的一个类,每个线程都有唯一的一个Thread对象与之关联。JVM使用一些属性描述线程对象,用一些类方法管理对象。
目录
一、线程的属性
属性 | 获取方法 |
---|---|
ID | getId() |
名称 | getName() |
状态 | getState() |
优先级 | getPriority() |
是否为后台线程 | isAlive() |
是否存活 |
isDaemon() |
是否中断 | isInterrupted() |
- 线程的ID
获取到的是线程在JVM中的身份标识,是线程的唯一标识,不同线程不会重复
注意理解“唯一”的含义。
内核的PCB、用户态的线程库、JVM中,只要用到线程且需要对其进行管理的地方,都会对线程进行身份标识。三个标识各不相同,但目的一样。每个地方的身份标识都是唯一的。
- 线程的名称
在Thread构造方法里取的名字
- 线程的状态
获取线程当前处于就绪还是运行等其他状态,是JVM当中设立的状态
(JVM中的线程有6种,具体类别以及状态转换会在另一篇博客中总结~ )
- 线程优先级
获取到线程调度的优先级
获取 ID、名称、状态、优先级代码示例:
public class demo1 {
public static void main(String[] args) throws InterruptedException {
Thread thread=new Thread(()->{
while(true){
for(int i=0;i<10;i++){
System.out.println("新线程"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
System.out.println("线程创建前状态: "+thread.getState());
thread.start();
//Thread.sleep(500);
System.out.println("线程创建后状态: "+thread.getState());
System.out.println(thread.getPriority());
System.out.println( thread.getName());
System.out.println(thread.getId());
}
}
- 线程是否为后台线程
线程分为前台线程和后台线程,后台线程又称守护线程。我们常说的主线程就是前台线程。
前台线程的结束决定进程是否结束。不管后台线程如何,前台线程全部结束,进程就结束。
创建出来的线程默认也是前台线程,不过通过设置 thread.setDaemon(true) 可以将前台线程转变为后台线程。
代码示例:
public class demo1 { public static void main(String[] args) { Thread thread=new Thread(()->{ while(true){ for(int i=0;i<10;i++){ System.out.println("新线程"+i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.setDaemon(true); //不设置thread.setDaemon(true),主线程运行结束时,新线程thread一直在运行 //设置thread.setDaemon(true)后,主线程运行结束,进程直接结束 //注意:必须 要在创建线程之前 就将thread设置为后台线程 thread.start(); System.out.println(thread.isDaemon()); } }
运行截图:
- 线程是否存活
- 线程是否被中断
获取到线程当前是否被中断
二、 线程的方法
1. 线程的构造方法
方法1&