当前位置:网站首页>Thread 类的基本用法——一网打尽
Thread 类的基本用法——一网打尽
2022-07-31 06:27:00 【是小鱼儿哈】
目录
一、线程的创建
1、继承Thread类,重写run方法
方式一、不借助匿名内部类
- 创建一个继承于Thread类的子类
- 在该子类中重写Thread类中的run方法
- 实例化该子类类型,用父类Thread引用重写了run方法的子类对象,向上转型
- 通过上述引用调用start方法,创建该线程,并将该线程(PCB参与到系统调度中,与其他线程一起进行随机调度执行)

方式二、借助匿名内部类
- 借助该匿名内部类将上述三步:子类继承Thread、重写run、创建实例化对象,合并为一步
- 调用start方法


2、实现 Runnable, 重写 run方法
方式一:不用匿名内部类
- 1.创建一个实现了Runnable接口的类
2.用该类去实现Runnable中的抽象方法:run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
5.通过Thread类的对象调用start()

方式二、借助匿名内部类
- 把创建一个实现了Runnable接口的类、重写run方法、实例化该类合并
- 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象(这一步还可以与上面的合并)
- 调用start()方法

3、使用 lambda 表达式


二、线程中断
1、使用自己的标志位来区分线程是否要结束


2、使用Thread自带的标志位

那么从上面我们可以看到,因为在t线程中调用了sleep方法,使得抛出了异常——在这里我们的程序成功的捕获了该异常,进入了catch语句,打印了异常信息;
那么我们可不可以通过改变catch语句中的内容来对该线程进行不同的处理呢?当然可以!!!

代码栗子
public class thread {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("线程正在运行中...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// e.printStackTrace();打印异常信息
//break; 1、立即退出
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
break; // 2、稍后退出
// 不退出,捕获到异常后什么也不干,相当于的忽略了该异常
}
}
});
System.out.println("线程开始运行");
t.start();
Thread.sleep(3000);
System.out.println("控制该线程退出!");
t.interrupt();
}
}总结
三、线程等待
先来看一个栗子

从这我们可以看到因为在t1、t2start之后,t1、t2和主线程的执行顺序是由操作系统进行随机调度的,那么我们怎样才能让t1、t2线程都执行完了,主线程再记录结束的时间戳呢?
通过join方法!!!
通过join方法我们可以让main线程主动的等待(想让谁阻塞,就再谁的线程里调用join)


四、线程休眠
sheep能够让线程休眠一会!!!

实例

五、获取线程实例

栗子一
栗子二
栗子三
边栏推荐
- 《白帽子说Web安全》思维导图
- 事务的传播机制
- Chapter 17: go back to find the entrance to the specified traverse, "ma bu" or horse stance just look greedy, no back to search traversal, "ma bu" or horse stance just look recursive search NXM board
- 2022.07.20_Daily Question
- 强化学习科研知识必备(数据库、期刊、会议、牛人)
- 什么是半波整流器?半波整流器的使用方法
- The Perfect Guide|How to use ODBC for Agentless Oracle Database Monitoring?
- 文件 - 04 下载文件: 根据文件下载链接下载文件
- Postgresql source code learning (34) - transaction log ⑩ - full page write mechanism
- 2022.07.26_每日一题
猜你喜欢

Fund investment advisory business

2022.07.29_每日一题

DAY18: Xss Range Clearance Manual

2704:寻找平面上的极大点

Web浏览器工作流程解析

‘vite‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

那些破釜沉舟入局Web3.0的互联网精英都怎么样了?

MySQL安装到最后一步 write configuration file 失败 怎么办?及后安装步骤

SCI写作指南

Postgresql source code learning (34) - transaction log ⑩ - full page write mechanism
随机推荐
Leetcode952. 按公因数计算最大组件大小
毫米波技术基础
Chapter 17: go back to find the entrance to the specified traverse, "ma bu" or horse stance just look greedy, no back to search traversal, "ma bu" or horse stance just look recursive search NXM board
单点登录 思维导图
2022.07.12 _ a day
什么是半波整流器?半波整流器的使用方法
2022.07.20_每日一题
2022.07.15_每日一题
Conditional statements of shell (test, if, case)
【网络攻防】常见的网络攻防技术——黑客攻防(通俗易懂版)
Gradle remove dependency demo
嵌入式系统驱动初级【2】——内核模块下_参数和依赖
How to set the computer password?How to add "safety lock" to your computer
【Go报错】go go.mod file not found in current directory or any parent directory 错误解决
PCB抄板
事务的传播机制
360 push-360 push tool-360 batch push tool
2022.07.24_Daily Question
【并发编程】ReentrantLock的lock()方法源码分析
【微服务】Nacos集群搭建以及加载文件配置