Thread 类的基本用法

简介: 比较推荐:使用 lambda 表达式创建线程的时候不用重写 run 方法。不需要显式重写run方法的原因是因为线程的目标方法已经在Lambda表达式中定义了。Lambda表达式是一种用于创建匿名函数的语法糖,它可以将一个方法(或一段代码块)包装为一个函数对象。当您使用Lambda表达式创建线程时,Lambda表达式的内容会被视为线程执行的任务,这个任务会自动成为run方法的实现。

目标:


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


目录
打赏
0
0
0
0
1
分享
相关文章
|
3月前
|
Ubuntu中dpkg和apt命令:debian包安装详解
希望这让你对于Ubuntu中的dpkg和apt命令有了更为清晰的理解。下次你面对软件包安装的问题,就可以轻松应对,优雅地在你的Linux系统中游刃有余了。
293 10
智能理解 PPT 内容,快速生成讲解视频
智能理解 PPT 内容,快速生成讲解视频
113 0
|
5月前
|
RT-DETR改进策略【Conv和Transformer】| 2023 引入CloFormer中的Clo block 双分支结构,融合高频低频信息(二次创新AIFI)
RT-DETR改进策略【Conv和Transformer】| 2023 引入CloFormer中的Clo block 双分支结构,融合高频低频信息(二次创新AIFI)
166 12
RT-DETR改进策略【Conv和Transformer】| 2023 引入CloFormer中的Clo block 双分支结构,融合高频低频信息(二次创新AIFI)
PolarDB 开源:推动数据库技术新变革
在数字化时代,数据成为核心资产,数据库的性能和可靠性至关重要。阿里云的PolarDB作为新一代云原生数据库,凭借卓越性能和创新技术脱颖而出。其开源不仅让开发者深入了解内部架构,还促进了数据库生态共建,提升了稳定性与可靠性。PolarDB采用云原生架构,支持快速弹性扩展和高并发访问,具备强大的事务处理能力及数据一致性保证,并且与多种应用无缝兼容。开源PolarDB为国内数据库产业注入新活力,打破国外垄断,推动国产数据库崛起,降低企业成本与风险。未来,PolarDB将在生态建设中持续壮大,助力企业数字化转型。
260 2
538个代码示例!麻省理工教授的Python程序设计+人工智能案例实践
Python简单易学,且提供了丰富的第三方库,可以用较少的代码完成较多的工作,使开发者能够专注于如何解决问题而只花较少的时间去考虑如何编程。 此外,Python还具有免费开源、跨平台、面向对象、胶水语言等优点,在系统编程、图形界面开发、科学计算、Web开发、数据分析、人工智能等方面有广泛应用。 尤其是在数据分析和人工智能方面,Python已成为最受开发者欢迎的编程语言之一,不仅大量计算机专业人员选择使用Python进行快速开发,许多非计算机专业人员也纷纷选择Python语言来解决专业问题。 由于Python应用广泛,关于Python的参考书目前已经有很多,但将Python编程与数据分析、人工智
在Linux中,什么是环境变量?如何设置和查看环境变量?
在Linux中,什么是环境变量?如何设置和查看环境变量?
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
OpenSumi问题之OpenSumi 对于 VS Code 插件生态要如何支持
224 6
aqs原理初探以及公平锁和非公平锁实现
aqs原理初探以及公平锁和非公平锁实现
415 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问