17. 多线程
1. 进程与线程:
进程和程序对应的。打开程序的时候就会开启至少一个进程。存的代码:: 资源内存
线程: cpu运行线程,线程访问进程上的资源。
2. 如何开启线程
第一种:
-
实现Runnable接口, 覆盖run方法。
-
实例化Thread类,通过构造放入runable.。
-
调用start()启动线程
第二种:
- 继承Thread类, 覆盖run方法。
开发用第一种: 单继承多实现
3. 线程方法
Thread.currentThread(): 获取当前线程对象
Thread.yield(); 从运行状态进入 等待运行状态
Thread.sleep(long ): 线程睡眠
t1.setPriority(int ): 优先级优先级,保证概率性的。高级先结束。
t1.setDaemon(boolean ): 设置守护线程, 创建者结束,线程就结束了
t2.join(); 把t2加入到当前线程中。t2先运行完之后再继续t1运行。
synchronized关键字: 同步锁
- 场景: 多个线程访问同一数据的时候可能产生线程安全问题。 (数据:锁的是对象的属性。)
- 同步锁会影响效率。
- StringBuffer线程安全,慢, StringBuilder 线程不安全,快
- 语法: 1. 修饰方法 2. 修饰代码块
public synchronized void add() {
count = count + 1;
System.out.println(Thread.currentThread().toString() + count);
}
public void substract() {
synchronized(this) {
count = count - 1;
System.out.println(Thread.currentThread().toString() + count);
}
}
- Object wait() : 线程进入等待池。
- Object notify(); 等待池随机一个线程回到 可运行状态
- Object notifyAll(); 等待池所有线程回到 可运行状态
六态图:
行状态
六态图:
[外链图片转存中…(img-Ci7X6orE-1618116205381)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)