Java并发编程概述

news2024/11/27 16:33:11

在学习并发编程之前,我们需要稍微回顾以下线程相关知识:

线程基本概念

程序:静态的代码,存储在硬盘中

进程:运行中的程序,被加载在内存中,是操作系统分配内存的基本单位

线程:是cpu执行的单位,进程可再分为线程,是程序处理的基本最小单位

线程的创建方式:

类 继承 Thread 重写run() 创建类的对象

实现Runnable接口 重写run() 任务 new Thread(任务)

实现Callable接口 重写call() 有返回值,可以抛出异常

创建线程:

多线程

什么是多线程?

一个程序中,支持同时运行多个线程。

多线程的优点:提升程序响应速度,提升硬件(cpu)利用率

多线程问题:线程过多占内存,cpu需要处理线程,需要性能能够满足;多个线程访问同一个资源

并发编程


什么是并发编程?

并行:同一个时间节点上,多个线程同时发生(真正意义上的同时)

并发:一个时间段内,不同进程交替访问同一个资源;

并发编程:在例如买票,抢购,秒杀等场景下,有大量的请求访问统一资源。会出现线程安全的问题,所以需要通过编程来控制解决让多个线程一次访问资源,解决线程安全问题,称为并发编程。

并发编程的根本原因

1.多核cpu

从而让我们可以实现多个线程同时进行

2.JMM java内存模型

java内存模型,是java虚拟机规范的一种工作模式

将内存范围主内存和工作内存。

变量数据存储在主内存中,线程在操作变量时,会将主内存中的数据复制一份到工作内存,在工作内存中操作完成后,在写回到主内存中。

是仿照于cpu、内存、硬盘的关系

多线程三个性质

1.有序性是什么?

有序性指的是程序按照代码的先后顺序执行

为了优化性能,有时候会改变程序中语句的先后顺序。cpu 的读等待同时指令执行是 cpu 乱序执行的根源。读指令的同时可以同时执行不影响的其他指令。

2.可见性是什么?

一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。

3.原子性是什么?

原子性(Atomic)就是不可分割的意思,是指在进行一系列操作的时候这些操作要么全部执行要么全部不执行,不存在只执行一部分的情况

原子操作的不可分割有两层含义:
1.访问(读、写)某个共享变量的操作从其他线程来看,该操作要么已经执行要么尚未发生,即其他线程看不到当前操作中的中间结果
2.访问同一组共享变量的原子操作时不能相交错的。如现实生活中从ATM机取款。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins部署及持续集成——傻瓜式教程

文章目录jenkins安装jenkins启动jenkins登录jenkins插件Jenkin创建一个项目通过Git进行构建构建策略jenkins安装 jenkins官网 https://www.jenkins.io/ 支持Docker pull下载安装 我用的windows,这里下载war包,这个位置下载的是最新的,需要java11或者更…

论文笔记:Depth-supervised NeRF: Fewer Views and Faster Training for Free

中文标题:深度信息监督的神经辐射场:需要更少的视角并且更快的训练 解决的问题: 在缺少视野的情况下,神经辐射场不能拟合正确的几何结构。 创新点 NeRF的第一步需要对场景图像做SFM(structure from motions),这个过程不光会获…

数据库/SQL教学推荐用什么样SQL工具?必须管理方便,轻松上手的

SQL语言逐渐成为职场人士必备的能力。很多人一直走上职场才了解什么是SQL,而更多人在大学就已经开始学习。 这些人一定对类似《数据库原理与应用》的课程不陌生。还记得你们是怎么熬过这门课的吗? 为什么说“熬”呢?实话说,数据库…

1行Python代码,对话ChatGPT,网友:太方便了

大家好,这里是程序员晚枫。 最近ChatGPT火爆全球,哪怕你不是程序员,应该也听过他的大名了。 今天我们就来一起体验一下~1行Python代码就够了! 上代码 导入poai这个库后,只需要1行代码poai.chatgpt.chat&#xff0c…

ThinkPHP 6 视图:从零开始

框架6.0默认只能支持PHP原生模板,如果需要使用thinkTemplate模板引擎,需要安装think-view扩展(该扩展会自动安装think-template依赖库)。 PHP原生模板 1.配置文件 默认设置为Think,因为没有安装,直接使用会…

lucene-8.5.1总结三:索引文件格式(1)

Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。当我们真正进入到Lucene源代码之中的时候,我们会发现:Lucene的索引过程,就是按照全文检索的基本过程,将倒…

基于 NeRF 的 App 上架苹果商店!照片转 3D 只需一部手机,网友们玩疯了

前言 只用一部手机,现实中的 2D 照片就能渲染出 3D 模型? 没错,无需再手动上传电脑或安装激光雷达,苹果手机自带 App 就能生成 3D 模型。 这个名叫 Luma AI 的“NeRF APP”,正式上架 App Store 后爆火: 小…

一个优质软件测试工程师的简历应该有的样子(答应我一定要收藏起来)

个人简历 基本信息 姓 名:xxx 性 别: 女 年 龄:24 现住 地址: 深圳 测试 经验:3年 学 历:本科 联系 电话:18xxxxxxxx 邮 箱:xxxxl163.com 求职意向 应聘岗位:软件…

吸收氨氮的树脂,脱氨树脂,污水处理厂氨氮低,总氮高,如何处理

产品介绍 氨氮在水中以游离氨和铵根离子的形式存在,根据一水合氨与铵根的平衡关系可知,利用离子交换工艺除氨氮时pH值尽量在偏酸性(pH值6左右)环境效果更佳。 随着环保形势越来越严,对于总氮的深度处理标准也越来越严…

CNStack 2.0:云原生的技术中台

在进入千禧年后,随着计算机技术的发展和业务创新的不断涌现,许多大公司内的 IT 计算中心也在酝酿着变革。一方面,各部门相对独立的 IT 管理平台已经难以满足日益增长和不断变化的计算管理需求;另一方面,IT 计算中心也越…

国民应用QQ如何实现高可用的订阅推送系统

导语|腾讯工程师许扬从 QQ 提醒实际业务场景出发,阐述一个订阅推送系统的技术要点和实现思路。如何通过推拉结合、异构存储、多重触发、可控调度、打散执行、可靠推送等技术,实现推送可靠性、推送可控性和推送高效性?本篇为你详细…

OpenFST、WFST 小记

文章目录关于 OpenFST安装 openfst关于 WFST编译 WFST关于 OpenFST 官网:https://www.openfst.org/twiki/bin/view/FST/WebHome快速入门文档:https://www.openfst.org/twiki/bin/view/FST/FstQuickTour下载:https://www.openfst.org/twiki/b…

linux系统安装jdk+tomcat+mysql

连接linux Windows安装FinalShell免费版,连接linux服务器 Mac OS连接步骤如下: 打开终端,输入ssh 服务器用户名ip -p 端口号(如:ssh root000.000.000.00 -p 22)到这会让你输入yes或者no来确认是否连接,输…

APISpace 的 ChatGPT 它来了 一分钟快速接入没烦恼

如此火爆的 ChatGPT 大家肯定都已经知道了,我就不多说了。但是呢, OpenAI 的 ChatGPT 官网注册麻烦,接入繁琐,且需要海外信用卡才能支付,这就让广大的国内开发者头疼了。 于是,为了方便广大国内开发者体验…

加入bing体验chatGPT大军中来吧

1 第一步:加入候选名单 1、首先需要加入候选名单 https://www.microsoft.com/zh-cn/edge?formMA13FJ 2、下载最新的Edge浏览器、androd、iOS都有试用版本(可以看到iOS加护当前已满) 这里我下载的是dev版本,Canary版本由于是…

王道操作系统笔记(七)——— 内存管理的基本原理和要求

文章目录一、内存的概念和作用二、内存管理的概念三、进程运行的基本原理和要求3.1 程序执行过程3.2 逻辑地址和物理地址3.3 程序的链接3.4 程序的装入3.5 内存保护四、覆盖与交换4.1 覆盖技术4.2 交换技术一、内存的概念和作用 主存储器,简称主存,又称内…

【Spark分布式内存计算框架——Spark Core】4. RDD函数(中)Transformation函数、Action函数

3.2 Transformation函数 在Spark中Transformation操作表示将一个RDD通过一系列操作变为另一个RDD的过程,这个操作可能是简单的加减操作,也可能是某个函数或某一系列函数。值得注意的是Transformation操作并不会触发真正的计算,只会建立RDD间…

int、uint类型的比较与加减

uint与int的比较 int与uint比较时会把int转换成uint&#xff0c;一个负的int转换成uint会溢出。所以uint与int比较大小时容易得到错误的结果&#xff0c;如&#xff1a; #include <iostream> using namespace std;int main(int, char**) {cout << "compare …

IC真题 —— 刷题记录(1)

引言 记录一些 我自己刷的 IC行业招聘真题&#xff0c;不是每题记录&#xff0c;只记录一些值得记录的&#xff0c;写下自己的看法。主要是一些数字IC行业题目&#xff0c;偏前端。 1、有一个逐次逼近型 8位A/D 转换器&#xff0c;若时钟频率为250KHz&#xff0c;完成一次转换…

2023备战金三银四,自动化软件测试面试宝典合集

1.软件测试的定义是什么&#xff1f; 参考答案&#xff1a; 用手工或者自动化的方式执行测试用例的一个过程 2.软件测试的对象包括哪些&#xff1f; 参考答案&#xff1a; 源程序、目标程序、数据和相关文档 3.试结合软件开发流程模型&#xff0c;描述对应不同的阶段测试需要…