登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
Thread 类的基本用法、Java 线程的几种状态 ...
Thread 类的基本用法、Java 线程的几种状态
[ 复制链接 ]
系味
2026-1-10 01:25:02
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
在Java中,Thread类是多线程编程的核心。
线程创建 (Thread Creation)
创建线程主要有两种逻辑:继承Thread类或实现Runnable接口。
方式1:继承 Thread 类,重写run()
// 自定义线程类继承Thread
class MyThread extends Thread {
// 重写run(),定义线程执行逻辑
@Override
public void run() {
System.out.println("子线程执行:" + Thread.currentThread().getName());
}
}
// 使用
public class Demo {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start(); // 3. 调用start()启动线程(不能直接调用run())
}
}
复制代码
方式2:实现Runnable接口,传给Thread
// 实现Runnable接口
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("子线程执行:" + Thread.currentThread().getName());
}
}
// 使用
public class Demo {
public static void main(String[] args) {
// 把Runnable实例传给Thread
Thread t = new Thread(new MyRunnable());
t.start(); // 启动线程
}
}
复制代码
线程中断 (Thread Interruption)
线程中断不是强制停止线程,而是一种协作机制,即给线程发一个“请停止”的信号。
void interrupt():标记线程为 “中断状态”
boolean isInterrupted():判断线程是否处于中断状态
若线程在sleep/wait/join时被中断,会抛出InterruptedException,且中断状态会被清除
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) { // 检测中断状态
System.out.println("线程运行中...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// 捕获中断异常后,中断状态会被清除,需手动终止循环
System.out.println("线程被中断");
Thread.currentThread().interrupt(); // 重新标记中断(可选)
break;
}
}
});
t.start();
// 主线程1秒后中断子线程
Thread.sleep(1000);
t.interrupt();
复制代码
线程等待 (Thread Join)
有时主线程需要等待子线程执行完毕后再继续执行,这时可以使用join()。
t.join():当前线程会进入阻塞状态,直到线程t执行结束。
带参数的 join(long millis):设置最大等待时间,如果超时线程还没结束,当前线程就不再等待。
Thread t = new Thread(() -> {
System.out.println("子线程开始执行");
try { Thread.sleep(2000); } catch (InterruptedException e) {}
System.out.println("子线程执行完毕");
});
t.start();
// 主线程等待t执行完(最多等3秒)
t.join(3000);
System.out.println("主线程继续执行");
复制代码
线程休眠 (Thread Sleep)
static void sleep(long millis):让当前线程暂停指定时间(不会释放锁),抛出InterruptedException
System.out.println("开始休眠");
try {
Thread.sleep(2000); // 当前线程休眠2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("休眠结束");
复制代码
获取线程实例 (Get Current Instance)
在编写通用代码(尤其是 Runnable 中)时,常需要知道是谁在运行。
Thread.currentThread():返回代码当前正在执行的那个线程对象的引用。
常用操作:获取线程 ID (getId())、获取线程名称 (getName()) 等。
// 获取当前线程(这里是main线程)
Thread mainThread = Thread.currentThread();
System.out.println("当前线程名:" + mainThread.getName()); // 输出"main"
// 子线程实例
Thread t = new Thread(() -> {
Thread current = Thread.currentThread();
System.out.println("子线程名:" + current.getName()); // 输出"Thread-0"
});
t.start();
复制代码
Java线程的几种状态
线程状态一共有几种?
Java线程共有6种状态:
NEW (新建)
RUNNABLE (可运行)
BLOCKED (阻塞)
WAITING (等待)
TIMED_WAITING (超时等待)
TERMINATED (终止)
每种状态的含义与切换条件
NEW (新建)
含义:创建了线程对象(new Thread()),但尚未调用 start() 方法。
切换:调用 start() 方法后,进入 RUNNABLE 状态。
RUNNABLE (可运行)
含义:Java 将操作系统中的“就绪(Ready)”和“运行中(Running)”两种状态统称为 RUNNABLE。处于该状态的线程可能正在 CPU 上执行,也可能正在等待操作系统分配时间片。
切换:
就绪 -> 运行:获得 CPU 时间片。
运行 -> 就绪:CPU 时间片用完,或主动调用 Thread.yield()。
BLOCKED (阻塞)
含义:线程正在等待获取一个排他锁(如进入synchronized 代码块/方法),但该锁目前被其他线程持有。
切换:
RUNNABLE -> BLOCKED:尝试进入 synchronized 区域失败。
BLOCKED -> RUNNABLE:其他线程释放锁,当前线程成功竞争到锁。
WAITING (等待)
含义:线程处于无限期的等待状态,不会被分配 CPU 时间,必须等待其他线程显式地唤醒。
切换:
RUNNABLE -> WAITING:调用 Object.wait()(不带参数)、Thread.join()(不带参数)或 LockSupport.park()。
WAITING -> RUNNABLE:其他线程调用 Object.notify()、notifyAll() 或 LockSupport.unpark()。
TIMED_WAITING (超时等待)
含义:与 WAITING 类似,但在指定的时间后会自动唤醒,不需要其他线程显式唤醒。
切换:
RUNNABLE -> TIMED_WAITING:调用 Thread.sleep(ms)、Object.wait(ms)、Thread.join(ms) 等带时间参数的方法。
TIMED_WAITING -> RUNNABLE:时间结束,或被提前唤醒(如 notify())。
TERMINATED (终止)
含义:线程已经执行完毕(run() 方法正常结束)或因异常退出了执行。
切换:线程一旦进入此状态,生命周期结束,不可再次启动(再次调用 start() 会抛出异常)。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Thread
基本
用法
Java
线程
相关帖子
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
PipelinR:在Java中实现优雅的CQRS架构
Java SE 和 Java EE 的核心功能模块
.NET SqlSugar多线程下SqlSugarClient 的线程安全陷阱
Java 创建对象的 6 种方式 + 底层原理(面试必考)
java String为什么不可变
利用SWIG实现JAVA调用C/C++代码
公司新招了个 5 年 Java,开工第一天就被劝退了。。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
PipelinR:在Java中实现优雅的CQRS架构
4
80
尹心菱
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
0
938
搜娲瘠
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
1
60
恙髡
2026-03-05
业界
PipelinR:在Java中实现优雅的CQRS架构
3
33
铜坠匍
2026-03-05
业界
Java SE 和 Java EE 的核心功能模块
1
409
蔬陶
2026-03-05
业界
.NET SqlSugar多线程下SqlSugarClient 的线程安全陷阱
1
881
静轾
2026-03-05
安全
Java 创建对象的 6 种方式 + 底层原理(面试必考)
1
991
高小雨
2026-03-05
业界
java String为什么不可变
4
882
髡芯
2026-03-05
安全
利用SWIG实现JAVA调用C/C++代码
0
421
沦嘻亟
2026-03-07
安全
公司新招了个 5 年 Java,开工第一天就被劝退了。。
0
30
士沌
2026-03-10
回复
(21)
吟氅
2026-1-14 15:36:46
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
歇凛尾
2026-1-17 16:01:29
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
方子楠
2026-1-29 07:37:29
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
眩疝诺
2026-1-30 11:57:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
笃扇
2026-2-1 03:17:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
痨砖
2026-2-2 02:37:37
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
遑盲
2026-2-3 04:15:01
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
撷监芝
2026-2-6 09:45:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
崔和美
2026-2-7 05:52:04
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
司空娅玲
2026-2-8 02:41:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
祝安芙
2026-2-8 11:12:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
靳谷雪
2026-2-9 03:52:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
纪晴丽
2026-2-11 05:24:55
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
热心回复!
卢莹洁
2026-2-11 18:36:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
裸历
2026-2-21 11:55:44
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
揉幽递
2026-2-23 23:06:15
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
颓哀
2026-2-24 17:00:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
宗和玉
2026-2-26 10:17:59
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
崔竹
2026-2-26 18:12:11
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
系味
2026-2-26 18:12:11
关注
0
粉丝关注
11
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
韶又彤
9912
6
宋子
9880
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9869
10
遗憩
10006
查看更多
今日好文热榜
27
Gemini 3.1 Flash-Lite 正式上线:专为规模
244
【OpenClaw】博查搜索 Skill 正式上线|中
339
FastAPI + PostgreSQL 实战:从入门到不踩
685
MAUI 嵌入式 Web 架构实战(七) 构建设备
904
AI时代,程序员都应该是需求描述工程师
232
openclaw平替之nanobot源码解析(二):age
825
当纺织机轰鸣而来——一个数字时代“纺织女
478
空论与时论
216
搭建数据库服务高可用架构
285
2026卫生高级职称备考:卫生高级职称考试历
29
公司新招了个 5 年 Java,开工第一天就被劝
333
opencalw平替之nanobot 源码解析(一):环
983
【节点】[SceneDepth节点]原理解析与实际应
419
【节点】[SceneDepth节点]原理解析与实际应
758
"给我发个200元红包":一条群消息背后的 AI
478
使用 C++ 模拟 ShaderLanguage 的 swizzle
70
006:RAG 入门-面试官问你,RAG 为什么要切
291
Stanford-CS336-Lecture-02 Pytorch
327
【FAQ】HarmonyOS SDK 闭源开放能力 —Push
885
openclaw本地部署接入飞书教程(最细保姆版