Java 多线程与高并发,基础概念回顾
moboyou 2025-06-05 16:50 22 浏览
Java多线程 基础
想当初上大学时,最开始的计算机入门课是用Java语言教学的,也就是说,人生的第一行"Hello World"程序是用Java写的。可惜到现在在组里写Web项目,Java写的少了。想借着这个机会把Java相关的东西再捡一些起来,顺便回顾一下并行、并发等一些知识。
线程
在计算机世界里,当我们探讨并行的时候,实际上是指一系列的任务在计算机中同时运行。对计算机来说,每一个任务就是一个进程(process), 在每一个进程内部至少有一个线程(thread)在运行中。
线程是程序执行的一个路径,每一个线程都有自己的局部变量表、程序计数器(指向正在执行的指令指针)以及各自的生命周期。
如何创建线程
继承Thead类,重写run()方法。
class MyThread extends Thread { ... }
new MyThread().start();
- 实现Runnable接口,重写run()方法。
class MyRun implements Runnable {...}
new Thread(new MyRun()).start();
线程的生命周期
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直霸占着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换
- 新建状态,当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。
- 就绪状态,当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。
- 运行状态,如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态。
- 阻塞状态,当处于运行状态的线程失去所占用资源之后,便进入阻塞状态。
下面是在线程的生命周期当中,线程的各种状态的转换过程。
线程生命周期
守护线程(daemon)
守护线程是一类特殊的线程,一般用于后台的工作,比如JDK垃圾回收线程。可通过setDeamon() 方法设置。
Thread API
通常我们使用的与线程相关的API有: 1. sleep()。休息一段时间。建议使用TimeUnit来替代Thread.sleeo() 2. yield()。yield方法属于一种启发式方法,其会提醒调度器我愿意放弃当前的CPU资源,如果CPU资源不紧张,则会忽略这种提醒。 3. interrupt(). 中断方法,能够打断线程的阻塞。 4. join()。join某个线程A,会是的当前线程B进入等待,直到线程A结束生命周期,或者达到给定的时间。在此期间线程B是处于BLOCKED状态。
具体使用方法及细节可参照官方文档。
小结
现在开发中几乎不需要自己去细节操作Thread了,但是偶尔重温一下这些基础知识也是不错的,温故而知新。接下来会继续复习线程同步的知识。
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统Cacti特点:将监控到的数据,绘制成各种图形基于SNMP协议(网络管理协议)的监控软件,强大的绘图能力Nagios特点:状态检查和报警机制(例如:内存不足或CPU负载高时,及时的...
- 快速掌握Kafka系列《三》配置项总结
-
往期系列文章:1.快速掌握Kafka系列《一》基本概念入门2.快速掌握Kafka系列《二》常用操作命令汇总目录一、前言二、broker配置2.1三个基本配置2.2其它配置2.3...
- 8.mxGraph 命名空间与 Hello World 示例实践.md
-
2.2.2GeneralJavaScriptDevelopment常规JavaScript开发2.2.2.1JavaScriptObfuscation/JavaScript混淆[翻...
- 英特尔 i9-12900KS 最新爆料:基础功耗 150W,790 美元
-
IT之家2月14日消息,据爆料者@momomo_us的消息,现在已有海外经销商列出了i9-12900KS的商品信息。i9-12900KS的产品代码为BX8071512900KS,基...
- Spring Boot集成OAuth2:实现安全认证与授权的详细指南
-
SpringBoot集成OAuth2:实现安全认证与授权的详细指南引言在当今数字化时代,Web应用的安全认证和授权至关重要。OAuth2作为一种广泛应用的开放标准协议,为第三方应用提供了安全、便捷的...
- DNF人造神团本男气功加点攻略(dnf男气功用什么神话)
-
SP方面:加点从下往上点起,大技能全部点满,剩余sp在雷霆踏和念雷轰之间根据个人喜好二选一。加点代码:eJwNzTEKglAAx+Hf35D0pU8bImxpkSgHt47QFNRSi2cIkkJ...
- Python连接Mysql数据库的几种方式以及问题排查方法
-
一、使用pymysql连接Mysql数据库连接示例:conn=pymysql.connect(host=host,user=user,password=passwd,db=db,port=int(...
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
-
效果图展示1.动态效果演示2.静态切片效果图一、确定需求方案1.确定产品上线部署的屏幕LED分辨率本案例基于16:9屏宽比,F11全屏显示。2.部署方式浏览器打开播放,Chrome浏览器、360浏览...
- 36【源码】数据可视化:基于 Echarts + Python 动态实时大屏
-
效果图展示动态效果演示2.静态切片效果图一、确定需求方案1.确定产品上线部署的屏幕LED分辨率本案例于16:9屏宽比,F11全屏显示。2.部署方式浏览器打开播放,Chrome浏览器、360浏览器等。...
- Jsp Servlet Mysql实现的在线商城项目源码附带视频指导运行教程
-
今天给大家演示一款由jspservletMySQL实现的在线商城系统,系统项目源码在【猿来入此】获取!本系统实现了管理员管理用户、商品(商品分类)、订单、留言、新闻等功能,前台会员注册登录,查看商...
- MySQL大数据表处理策略,原来一直都用错了……
-
场景当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。数据的插入,查询时长较长后续业务需求的扩展,在表中新增字段,影响较大表中的数据并不是所有的都为有效数...
- 基于SpringBoot 的CMS系统,拿去开发企业官网真香(附源码)
-
前言推荐这个项目是因为使用手册部署手册非常完善,项目也有开发教程视频对小白非常贴心,接私活可以直接拿去二开非常舒服开源说明系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可...
- 「Qt入门第22篇」 数据库(二)编译MySQL数据库驱动
-
导语在上一节的末尾我们已经看到,现在可用的数据库驱动只有两类3种,那么怎样使用其他的数据库呢?在Qt中,我们需要自己编译其他数据库驱动的源码,然后当做插件来使用。下面就以现在比较流行的MySQL数据库...
- 基于SpringBoot从0到1编写一个图书管理系统(附源码)
-
项目源码地址:https://muzidong.com/productDetail/8ff44c71db6b4b6aa30c71e646b1c557需求分析基于SSM+MySql+LayUI...
- Jsp+Ssm+Mysql实现的投票管理系统源码附带视频指导配置运行教程
-
今天给大家演示的是一款由jsp+ssm框架+mysql实现的投票管理系统,系统分为前端和后台管理模块,系统项目源码在【猿来入此】获取!前端用户可以登录注册、查看投票信息,登录后可以进行投票,也可以查看...
- 一周热门
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- 快速掌握Kafka系列《三》配置项总结
- 8.mxGraph 命名空间与 Hello World 示例实践.md
- 英特尔 i9-12900KS 最新爆料:基础功耗 150W,790 美元
- Spring Boot集成OAuth2:实现安全认证与授权的详细指南
- DNF人造神团本男气功加点攻略(dnf男气功用什么神话)
- Python连接Mysql数据库的几种方式以及问题排查方法
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- 36【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Jsp Servlet Mysql实现的在线商城项目源码附带视频指导运行教程
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- mysql数据库源码 (21)