Thread 类的基本用法

目标:

  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();

相关推荐
快乐肚皮13 分钟前
fencing token机制
java·fencing token
叶落阁主23 分钟前
Neovim 插件 i18n.nvim 介绍
java·vue.js·vim
渣哥23 分钟前
让集合线程安全的几种靠谱方法
java
dylan_QAQ25 分钟前
Java转Go全过程06-工程管理
java·后端·go
a587691 小时前
消息队列(MQ)初级入门:详解RabbitMQ与Kafka
java·分布式·microsoft·面试·kafka·rabbitmq
千里码aicood1 小时前
【springboot+vue】党员党建活动管理平台(源码+文档+调试+基础修改+答疑)
java·数据库·spring boot
Chan161 小时前
【智能协同云图库】基于统一接口架构构建多维度分析功能、结合 ECharts 可视化与权限校验实现用户 / 管理员图库统计、通过 SQL 优化与流式处理提升数据
java·spring boot·后端·sql·spring·intellij-idea·echarts
先做个垃圾出来………1 小时前
差分数组(Difference Array)
java·数据结构·算法
BillKu2 小时前
Java核心概念详解:JVM、JRE、JDK、Java SE、Java EE (Jakarta EE)
java·jvm·jdk·java ee·jre·java se·jakarta ee
刘婉晴2 小时前
【Java】NIO 简单介绍
java·nio