本篇文章将介绍几个常用的线程属性及对应的方法。
| 属性 | 获取方法 |
|---|---|
| ID | getId() |
| 名称 | getName() |
| 设置后台线程 | setDaemon() |
| 获取线程当前引用 | currentThread() |
| 是否存活 | isAlive() |
| 线程是否中断 | Interrupted() |
| 获取线程状态 | getState() |
| 线程等待 | join() |
| 休眠 | sleep() |
💡线程ID
1.ID是线程的唯一标识,一个进程中的每个线程都有一个唯一的ID,但是,这个ID不是真正的ID,这个ID是Java自己分配的,不是系统API分配的,代码如下:
public static void main(String[] args) {
Thread thread = new Thread(() -> {
System.out.println("hello Thread");
});
thread.start();
System.out.println("hello main");
//获得thread的id
System.out.println(thread.getId());
}
💡线程名称
2.getName() 在创建线程时,给线程指定名称后,就可以使用getName( )获取,在后期进行调试时方便观察,代码如下:
public static void main(String[] args) {
//在创建thread对象时,指定线程名称
Thread thread = new Thread(() -> {
System.out.println("hello Thread");
}, "线程1");
thread.start();
System.out.println("hello main");
//获取线程名称
System.out.println(thread.getName());
}
💡获取线程当前引用
| 方法 | 说明 |
|---|---|
| public static Thread currentThread() | 返回当前线程对象的引用 |
代码如下:
public class Demo1 {
public static void main(String[] args) throw interruptedException {
Thread thread = new Thread(() - {
System.out.println(Thread.currentThread.getName)
}, "张三");
thread.start();
}
}

💡线程的休眠
| 方法 | 说明 |
|---|---|
| public static void sleep(long millis) | 休眠当前线程 millis 毫秒 |
这里的睡眠时间的精度是有误差的,代码如下:
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(1000);
long end = System.currentTimeMillis();
System.out.println(end-start);
}

通过代码可以看到,想要休眠1000 毫秒,却休眠了1005秒,因为:系统会按照1000这个时间来控制线程的睡眠,等达到1秒后,就会唤醒线程,就会使线程从阻塞状态转化为就绪状态,但是呢,当线程转换为就绪状态后,并不是说就会直接去CPU上执行,这中间会有一个“调度开销”,所以,在时间上,就会和我们预期的不一样。
💡后台线程
设置后台线程
先解释一下什么是前台线程:当我们正常创建一个线程时,它是一个前台线程,只要前台线程不结束,整个Java进程都不会结束。
后台线程:进程否结束,与后台线程是否结束没有关系,就算后台线程未结束,进程也可以结束
public static void main(String[] args) throws InterruptedException {
//在创建thread对象时,指定线程名称
Thread thread = new Thread(() -> {
while(true) {
System.out.println("hello Thread");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
throw new RuntimeException(e)

3794

被折叠的 条评论
为什么被折叠?



