一本 Java 多线程笔记
一本 Java 多线程笔记
作者:HuoDAt
日期:2021/03/31
一.线程的基本概念
线程(thread)作为 调度 和 执行的单位 ,每个线程都有独立的运行栈和 程序计数器 线程切换的开销小
虚拟机栈:VM stack
程序计数器: program couter Register
对于 方法区(Method Area) 和 堆(Heap) 是单个进程共享的
进程中的线程可以共享资源
正是由于线程之间的共享资源的关系 所以 多个线程操作系统资源的时候 可能出现安全隐患 ----- 锁的出现
多核服务器的情景下 线程之间的配合 对于性能的影响很大
在一个Java应用中 至少有三个线程:
-
GC() 垃圾回收
-
异常处理线程
1.2 并发 与 并行
并发:
多个 人 干着 多件事情·
并行:
“同时”,多个人干同一件事情 eg(电商平台秒杀)
1.3 为什么要使用多线程(why)
-
提升程序的响应程度。对图形化界面很有意义
-
提高计算机 CPU 的利用率
-
改善程序结构 讲一个程序划分为多个线程
1.4 什么时候要使用多线程(when)
-
程序需要同时执行多个任务
-
程序 有实现需要等待的任务
-
有需要后台运行的程序
二.线程的创建与使用
JVM 允许程序运行多个线程 通过 java.lang.Thread 类来实现
-
方法一 :继承Thread方法
重写 父类 run方法
创建 继承于Thread的子类的 对象
调用 子类的 start() 方法
通过观察 start()的 源码 我们 可以发现 其实start是分两个步骤的
-
启动线程
-
调用该线程的run方法
2.2 线程中的基础常用方法
-
start() 启动当前线程 并且调用run方法
-
run()
-
currentThread() 静态方法 返回当前执行的的线程
-
getName()获取线程名字
-
setName()设置线程名字
-
yieId() 释放当前CPU执行权
-
join() 插入线程 如本来在主线程 我使用 h1.join
-
线程就会切换至h1要插入的线程完成后 原来线程才会 停止堵塞状态
-
-
stop () 强行结束当前线程生命周期
-
sleep(long millitime) 让线程"睡眠"指定毫秒
-
isAlive() 判断当前线程是否存活
1 MyThread thread1 = new MyThread(); 2 3 thread1.getName(); 4 //获取当前线程名字 5 6 thread1.setName("ReNameTest"); 7 //为thread1 线程改名 8 9 Thread.currentThread().setName("ReNameTest_Main") 10 //尝试为主线程改名 11 12 thread1.start(); 13 //运行thread1线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构