96SEO 2026-02-20 10:07 0
这节中小编就来和大家聊一聊多线程是什么以及需要我们掌握多线程程序的编写、多线程的状态、什么是线程不安全及解决思路以及掌握synchronized、volatile关键字。

在上节博客中给大家讲到了进程和进程管理我们讲解了为什么要使用调度CPU的按照并发的方式来执行进程的在PCB中也提供了一些属性里面有进程的优先级、进程的状态、进程的上下文、进程的记账信息......也给大家讲解了引入进程的目的就是为了能够实现多个任务并发执行的效果。
接下来小编就给大家讲解一下什么是线程线程与进程之间又有什么联系。
一个线程就是一个“执行流”每个线程之间都可以按照顺序执行自己的代码多个线程之间“同时”执行着多份代码。
单核CPU的发展遇到了瓶颈要想提高算力就需要多核CPU而并发编程能够更充分利用多核CPU资源。
有些任务场景需要“等待IO”为了让等待IO的时间能够去做一些其他的工作也需要用到并发编程。
创建线程比创建进程更快。
销毁线程比销毁进程更快。
调度线程比调度进程更快。
最后线程虽然比进程轻量但是人们还不满足于是又有了“线程池”和“协程”。
有关于线程池的话题我们后面在介绍关于协程的话题这里我们不做过多的讨论。
进程有一个重大的问题就是比较重量如频繁的创建/销毁进程成本会比较高。
所以我们又引出了线程的概念。
那么线程与进程之间到底有什么联系和区别呢我们接着往下看。
进程是包含线程的。
每一个进程至少有一个线程存在即主线程。
一个进程里可以有一个线程也可以有多个线程每个线程之间都是一个独立存在的执行流多个线程之间也是并发执行的。
这里注意多个线程可能是在多个CPU核心上同时运行也可能是在一个CPU核心上通过快速调度并发运行。
操作系统真正的调度是在调度线程而不是在调度进程。
注意线程是操作系统调度运行的基本单位进程是操作系统资源分配的基本单位
注意只有在进程启动的时候创建第一个线程的时候需要花成本去申请系统资源。
一旦进程第一个线程创建完毕此时后续再创建线程就不必在申请资源了这样创建和销毁的效率就会大大提高。
进程包含线程。
进程有自己独立的内存空间和文件描述符表同一个进程中的多个线程之间共享一份地址空间和文件描述符表。
进程是操作系统资源分配的基本单位线程是操作系统调度执行的基本单位。
进程之间具有独立性一个进程挂了不会影响其他进程同一个进程里的多个线程之间一个线程挂了可能会把整个进程带走影响其他进程。
线程是操作系统中的概念操作系统内核实现了线程这样的机制并且对用户层提供了一些API供用户使用。
Java标准库中Thread类可以视为是对操作系统提供的API进行了进一步的抽象和封装。
上面说了这么多的概念接下来还是带着大家一起在代码中切实的感受一下究竟什么是多线程。
MyThread();//start会创建新的线程。
t.start();//run不会创建新的线程。
run是在main线程中执行的。
//t.run();while
在上述代码中我们看到我们写了一个类MyThread并继承了Thread类在java中标准库提供了一个类Thread它能够表示一个线程。
在继承Thread的时候我们需要对父类中的run()方法进行重写。
main方法所对应的线程一个进程里面至少有一个线程也可以称为主线程。
通过t.strat创建一个新的线程。
main”是交替打印的但又不是严格意义上的交替打印。
按照我之前的单线程的想法如果我们执行main线程中的进入while循环之后由于是死循环那么按照之前的想法应该是出不来的应该是要一值打印“hello
main”的但是这里并不是我们想象中的那样而是和另一个线程中的一起交替打印那就说明这里是启动了两个线程两个线程分别独立运行。
多线程在CPU上的调度是不确定的是随机的。
所以我们看到的就是不规律的交替打印。
这也就是我们上述中提到的一个进程中的多个线程并发执行的过程。
同时我们可以借助jak里面的工具jconsole来分析java里的线程。
点击线程在下面可以看到很多线程这里你会发现有很多线程这里不只有咱们创建出来的两个。
除了标记出来的两个线程之外其他都是JVM自己创建出来的。
MyThread();//start会创建新的线程。
t.start();//run不会创建新的线程。
run是在main线程中执行的。
//t.run();while
{//2.创建爱你Thread类实例调用Thread的构造方法是将Runnable对象作为target参数。
MyRunnable
Thread(runnable);//3.调用start方法。
t.start();while
继承Thread类直接使用this就表示当前线程对象的引用。
实现Runnable接口this表示的是MyRunnable的引用需要使用Thread.currentThread()
{e.printStackTrace();}}}};//启动线程t.start();//主线程while
{e.printStackTrace();}}}});//启动线程t.start();//主线程while
这个也是创建线程最推荐的写法使用lambda表达式也是最直观的简单的写法
前面也给大家讲解过有关于lambda表达式的用法如果还有不会的同学请点击下面的链接先去看看lambda表达式的使用吧http://t.csdn.cn/zEPFB
{e.printStackTrace();}}});//启动线程t.start();//主线程while
Thread类是JVM用来管理线程的一个类换句话说每个线程都由一个唯一的Thread对象与之关联。
Java代码中的Thread对象和操作系统中的线程是一一对应的。
用我们上述的例子来看每个执行流也需要有一个对象来描述类似下图所示而Thread类的对象就是用来描述一个线程执行流的JVM会将这些Thread对象组织起来用于线程调度线程管理。
target使用Runnable对象创建线程对象ThreadString
name使用Runnable对象创建线程对象并命名ThreadThreadGroup
target线程可以被用来分组管理分好的组即为线程组这个目前我们了解即可
{e.printStackTrace();}}},我的线程);t.start();while
状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted()
t);},我的线程);t.start();System.out.println(线程ID是
t.getId());System.out.println(线程名称是
t.getName());System.out.println(线程状态是
t.getState());System.out.println(线程优先级是
t.getPriority());System.out.println(线程是否是后台线程
t.isDaemon());System.out.println(线程是否存活
t.isAlive());System.out.println(线程是否被中断
true表示是后台线程。
后台线程不会阻止java进程结束哪怕后台线程还没有执行完java进程该结束就会结束。
false表示是前台线程。
前台线程会阻止java进程结束必须得java进程中的所有前台线程都执行完java进程才会结束。
注意创建的线程默认是前台的也可以通过setDaemon修改成后台线程。
是描述系统内核里的那个线程是否还存活。
线程的入口方法执行完毕此时系统中的对应的线程就没有了此时调用该线程isAlive就是false。
这节中小编主要是给大家分享了线程了概念、线程与进程之间的区别和联系以及如何创建线程。
希望这节对大家学习JavaEE有一定的帮助想要学习的同学记得关注小编和小编一起学习吧如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津在此小编先谢过各位大佬啦
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback