Thread
类在Java中是用于管理线程的关键类,换句话说,每个线程都与一个唯一的Thread
对象相关联。以我们上面的例子为例,每个执行流都需要有一个对象来描述。Thread
类的对象就是用来描述一个线程执行流的,JVM会将这些Thread
对象组织起来,用于线程调度和管理。
Thread
的常见构造方法方法签名 | 说明 |
---|---|
Thread() |
创建线程对象 |
Thread(Runnable target) |
使用 Runnable 对象创建线程对象 |
Thread(String name) |
创建线程对象,并命名 |
Thread(Runnable target, String name) |
使用 Runnable 对象创建线程对象,并命名 |
Thread(ThreadGroup group, Runnable target) |
线程可以被用来分组管理,分好的组即为线程组。了解即可。 |
1 | Thread t1 = new Thread(); |
1 | public static void main(String[] args) { |
这是用上面的构造方法新建的线程,并且命名为:myThread
我们运行后,打开自己jkd
的bin
目录。
连接这个正在运行的类。点击线程,就看有看见这个被我们命名的线程正在运行。
为什么main也执行了却看不见?因为main
方法已经执行完了。
Thread
的常见属性属性 | 获取方法 | 说明 | 注意 |
---|---|---|---|
ID | getId() |
获取线程的唯一标识符 | 不同线程的ID不会重复 |
名称 | getName() |
获取线程的名称 | 调试工具常用 |
状态 | getState() |
获取线程的当前状态 | 状态表示线程当前所处的情况 |
优先级 | getPriority() |
获取线程的优先级 | 优先级高的线程理论上更容易被调度到 |
是否后台线程 | isDaemon() |
检查线程是否为后台线程 | JVM会在所有非后台线程结束后才结束运行 |
是否存活 | isAlive() |
检查线程是否存活 | 简单理解为run 方法是否运行结束 |
是否被中断 | isInterrupted() |
检查线程是否被中断 | \ |
主要说一下后台线程和前台线程。
在Java中,线程可以分为两种类型:前台线程(也称为用户线程)和后台线程(也称为守护线程)。这两种线程之间有一些关键的区别:
前台线程(用户线程):
main
方法完成。后台线程(守护线程):
setDaemon(true)
方法设置的,它告诉JVM这个线程是一个后台线程。在Java中,通过setDaemon(true)
方法将线程设置为后台线程:
1 | public static void main(String[] args) { |
需要注意的是,一旦线程启动,就无法将其设置为或从后台线程切换回前台线程。因此,设置线程为后台线程应在启动线程之前完成。
Thread
的常用方法start
方法start
方法是用于在系统中创建真正的线程。
该方法的调用实际上是调用系统的API完成线程的创建工作。start
方法本身的执行是瞬时完成的,它仅仅是告诉系统你要创建一个线程。一旦start
被调用,代码会立即继续执行start
后续的逻辑。在这个过程中,系统会异步地执行新线程的run
方法,使得新线程可以并行运行。
内核是一个系统最核心的功能:对下管理好硬件设备,对上给各种程序提供稳定运行环境。
中断一个线程目前常见的有以下两种方式:
interrupt()
方法来通知通过共享的标记的这种方法是在线程之间共享一个标志(一个布尔变量),线程定期检查这个标志以决定是否应该停止执行。
1 | public class SharedFlagExample implements Runnable { |
running
是一个共享的标志。当需要停止线程时,调用 stopRunning
方法将 running
设置为 false
,线程将在下一次循环时停止执行。
interrupt()
方法1 | public class InterruptExample implements Runnable { |
注意事项
interrupt()
方法中断线程时,目标线程不一定会在收到中断信号后立即停止执行。Thread.stop()
方法来中断线程,因为它可能会导致线程资源泄漏等问题。等待线程是指让当前线程进入阻塞状态,直到满足特定条件后再继续执行。
Java 提供了多种方法来实现线程等待,包括:
wait()
方法:用于让当前线程等待另一个线程对其进行唤醒。
join()
方法:用于让当前线程等待另一个线程终止。
sleep()
方法:用于让当前线程休眠指定的时间。
1 | public class WaitExample { |
休眠当前线程是指让当前线程进入阻塞状态,并等待指定的时间后再继续执行。Java 提供了 Thread.sleep()
方法来实现线程休眠。
1 | public class SleepExample { |