当前位置: 首页 > news >正文

认识线程 — JavaEE

 83fa83208d714018ac75190a40c156e9.gif

目录

 

认识线程(Thread)

1 线程是什么?

2 为什么要有线程

3 进程和线程的区别

区别一

区别二

区别三

区别四

4. Java的线程和操作系统线程的关系


 

认识线程(Thread)


1 线程是什么?


  • 一个线程就是一个 "执行流"。
  • 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码。
  • 将一个大任务分解成不同小任务,交给不同执行流分别排队执行。

2 为什么要有线程


 

d9504f19322e4438aee1867ddfe7879b.png

 

但是在服务器开发场景上,一般情况下,客户端,服务器都在一台计算机上;但是我们可以把客户端和服务器分别放在两台电脑上。

此时我们可以通过网络的方式,远程访问mysql服务器,这也是以后工作中,最典型的一种场景

c1743ce267254d2f9c4a49e41af02fa6.png

在这种服务器的情况下,涉及一个非常关键的问题,一个服务器程序,同一时刻,是需要给多个客户端提供服务的:

8c7759f73a7148eab196b0caab64c151.png

客户端按照并发的方式,发送请求到服务器,服务器就要能对这些请求进行处理。怎么处理?

9f1dd611a0484e6fac5369f0629d90cf.png


68a91a9627c549ecae3974f0cbccc59e.png

4d0cc8bb6b734bef94478fee42ebf7ba.png

af36bc4ad9e143ad9f23fe6a1b77d148.png

总结:

引入线程,也可以解决并发编程,提高效率,同时节省开销。

但是,线程不是引入越多越好,适量的引用可以提高效率,引入太多,会因为线程调度的开销过大,反而拖慢程序的性能。

多个线程共享同一份资源,可能会产生冲突,导致线程安全问题,甚至进一步的,如果某一个线程抛出异常没有得到及时的处理,可能会带走整个进程。


3 进程和线程的区别


e46ecb9d68ef49dbb17affda9f77cbae.png

f13c954eff0a44fe952673b1919fed91.png

区别一

进程是包含线程的. 每个进程至少有一个线程存在,即主线程。

cf42a9d65c354d95bb6080f5ea4c4293.png

259a8154370042e4a68e612f21bbd7eb.png

windows 的任务管理器中,我们无法看到进程内部的线程。需要借助一些其他调试工具(VS的调试器,Windbg.....),才可以看到每个进程中的线程


区别二

进程和进程之间不共享内存空间. 同一个进程的线程之间共享同一个内存空间

3670ca429f4b47ab9a644665406998ab.png

区别三

进程是系统分配资源的最小单位,线程是系统调度的最小单位。

af3c3951c8ab473291dc9393ca5ed56a.png

为什么不能说线程共享CPU资源呢?

6d76f357a92d4877bf6b114912dafa1d.png

区别四


一个进程挂了一般不会影响到其他进程. 但是一个线程挂了, 可能把同进程内的其他线程一起带走(整个进程崩溃).

d2a50a2ac8164cf6943a30eda7275db1.png

54ab441ebf244392a4e9d71499a1adc6.png


4. Java的线程和操作系统线程的关系

线程是操作系统中的概念。操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API, 供用户使用(例如 Linux 的 pthread 库)


5c9754c3d5844139a8934bfb81b616ff.png


通俗地讲,API就是,Java的开发大佬写了一些类或者函数,我们拿过来直接用即可。如:

2a00d2587b554ef49cae8560fcde03d1.png


Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.

64f5b0b0a5a64399b92f351826704e2e.png

 

 

http://www.lryc.cn/news/471062.html

相关文章:

  • 【C++单调栈】853. 车队|1678
  • 第十届文荣奖华丽开幕,郁葱以青春与努力绽放青年演员光芒
  • CMake 生成器表达式介绍
  • ubuntu 20.04编译驱动报gcc-12 not found错误
  • docker sameersbn/bind dns服务器
  • 错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
  • 深度剖析美区代理IP的多元应用与优势
  • 基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)
  • Uni-App-04
  • ElasticSearch分片
  • spring高手之路
  • 工字钢与H型钢有什么区别?90%的工程师都搞错了!
  • 10个程序员可以接私活的平台(非常详细)零基础入门到精通,收藏这篇就够了
  • 小程序云开发CMS新版数据模型讲解,可视化网页管理后台,内容管理对数据库进行增删改查操作,新闻小程序实战学习
  • undertow服务器初始化
  • LeetCode9:回文数
  • 模板语法(2)
  • 从头学PHP之数组输出基本函数
  • 基于SSM+小程序的4S店客户管理系统(汽车2)
  • ZYNQ AXI_Timer 中断
  • UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑
  • Python 实现日期计算与日历格式化输出(万年历)
  • 10.28.2024刷华为OD C题型
  • 映射问题的解决办法(mybaitis)
  • 关于机器学习方向学习的一些建议(过来人)
  • 【云原生】云原生后端:网络架构详解
  • 期货资管子系统框架设计JS路径及源代码分享
  • 【YOLO 系列】基于YOLO的工业自动化轴承缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • Word中Normal.dotm样式模板文件
  • 生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘