目标:
1. 线程创建
2. 线程中断
3. 线程等待
4. 线程休眠
5. 获取线程实例
线程创建
1. 继承 Thread 类
创建一个 Thread 类的子类,并重写 run 方法,然后通过实例化的子类对象来调用 start() 方法启动线程。
class MyThread extends Thread { public void run() { // 线程执行的代码 } } MyThread thread = new MyThread(); thread.start();
2. 实现 Runnable 接口
创建一个类并实现 Runnable 接口,然后重写 run 方法,然后将实现Runnable 接口的对象传递给 Thread 类的构造函数。
class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } Thread thread = new Thread(new MyRunnable()); thread.start();
3. lambda 表达式
比较推荐:使用 lambda 表达式创建线程的时候不用重写 run 方法。
不需要显式重写run方法的原因是因为线程的目标方法已经在Lambda表达式中定义了。Lambda表达式是一种用于创建匿名函数的语法糖,它可以将一个方法(或一段代码块)包装为一个函数对象。当您使用Lambda表达式创建线程时,Lambda表达式的内容会被视为线程执行的任务,这个任务会自动成为run方法的实现。
Thread t = new Thread(() -> { //线程执行的代码 }); t.start();
线程中断
使用 interrupt() 方法中断线程的执行。被中断的线程需要检查自身的中断状态(下篇博客会介绍),并在必要时终止线程的执行。
Thread myThread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { // 线程执行的代码 } }); // 中断线程 myThread.interrupt();
线程等待
使用 wait() 和 notify() / notifyAll() 方法来实现线程的等待和通知机制。
wait() :让线程等待,直到其他线程调用对象的 "notify() / notifyAll() " 方法来唤醒它
notify() :唤醒等待在相同对象上的一个随机线程
notifyAll() :唤醒等待在相同对象上的所有线程
线程休眠
使用Thread.sleep() 方法使线程进入休眠状态,暂停执行一段指定的时间。
try { Thread.sleep(1000); // 休眠1秒 } catch (InterruptedException e) { // 处理中断异常 }
获取线程实例
使用 Thread.currentThread() 方法来获取当前正在执行的线程的实例。
Thread currentThread = Thread.currentThread();