【Java】JUC并发编程-进程线程

目录

  • 一、什么是JUC
  • 二、进程和线程
    • 1、进程
    • 2、线程
  • 三、线程的六种状态
  • 四、wait与sleep的区别
  • 五、并发与并行
    • 1、串行模式
    • 2、并行模式
    • 3、并发模式
    • 4、管程
  • 六、用户线程与守护线程
    • 1、用户线程(自定义线程)
    • 2、守护线程(比如垃圾回收)

一、什么是JUC

JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!

二、进程和线程

一个进程中有多个线程

1、进程

进程是资源分配的最小单位

指在系统中正在运行的一个应用程序,程序一旦运行就是进程

2、线程

线程是程序执行的最小单位

系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流

三、线程的六种状态

public enum State {// 新生NEW,// 运行RUNNABLE,// 阻塞BLOCKED,// 等待WAITING,//超时等待TIMED_WAITING,//终止TERMINATED;
}

四、wait与sleep的区别

  • sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用
  • sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)
  • 二者都可以被interrupted方法中断

五、并发与并行

并发:同一时刻多个线程在访问同一资源,多个线程对一个点
并行:多项工作一起执行,之后再汇总

1、串行模式

串行表示所有任务有一一按先后顺序进行。串行意味着必须先装完一车柴才能运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步骤,才能进行下一个步骤。

串行是一次只能取得一个任务,并执行这个任务

2、并行模式

并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖于多线程/多线程代码,从硬件角度上则依赖于多核CPU

3、并发模式

并发指的是多个程序可以同时运行的现象,更细化的是多线程可以同时运行或者多指令可以同时运行

4、管程

管程(Monitor):在Java中称之为“锁”,在操作系统中称之为“监视器”。是一种同步机制,保证同一个时间,只有一个线程访问被保护的数据或者代码。
jvm同步基于进入和退出的过程中进行操作的,而进入和退出是使用管程对象实现的。每个对象都会有一个Monitor管程对象。而管程对象是会随着Java对象一起创建和销毁。

通俗来说的话就是:管程对象就是对我们的临界区进行加锁,进入时加锁,退出时解锁。进入退出通过管程对象进行管理

六、用户线程与守护线程

1、用户线程(自定义线程)

public static void main(String[] args) {Thread thread = new Thread(() -> {//isDaemon()表示是用户线程还是守护线程,如果值为true,则为守护线程,如果值为false,则为用户线程System.out.println(Thread.currentThread().getName() + "::" + Thread.currentThread().isDaemon());while (true) {}}, "thread");thread.start();System.out.println(Thread.currentThread().getName()+" over");
}

执行结果:主线程结束了,用户线程还在运行,说明jvm是存活的一个状态

在这里插入图片描述

2、守护线程(比如垃圾回收)

public static void main(String[] args) {Thread thread = new Thread(() -> {//isDaemon()表示是用户线程还是守护线程,如果值为true,则为守护线程,如果值为false,则为用户线程System.out.println(Thread.currentThread().getName() + "::" + Thread.currentThread().isDaemon());while (true) {}}, "thread");//设置守护线程//用户线程包括守护线程,在设置用户线程包括守护线程的时候,要写在start()方法之前thread.setDaemon(true);thread.start();System.out.println(Thread.currentThread().getName()+" over");
}

执行结果:没有用户线程了,都是守护线程,说明jvm结束

在这里插入图片描述

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

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

相关文章

Python爬虫学习笔记(十三)————CrawlSpider

目录 1.CrawlSpider介绍 2.使用方法 (1)提取链接 (2)模拟使用 (3)提取连接 (4)注意事项 3.运行原理 4.Mysql 5.pymysql的使用步骤 6.数据入库 (1)s…

【100个 Unity实用技能】 | Unity中Text文本框 和 InputField文本输入框 内容换行问题【文末送书】

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

游戏开发中的Jenkins

1.安装搭建环境可自行百度或者点击下方链接参考 .【游戏开发进阶】教你Unity通过Jenkins实现自动化打包,打包这种事情就交给策划了(保姆级教程 | 命令行打包 | 自动构建) 2.Jenkins复制和导出导入job 一、同一个Jenkins中复制job 如果是同…

Ceph的应用

文章目录 一、创建 CephFS 文件系统 MDS 接口1)在管理节点创建 mds 服务2)查看各个节点的 mds 服务3)创建存储池,启用 ceph 文件系统4)查看mds状态,一个up,其余两个待命,目前的工作的…

应该选云服务器还是物理服务器

应该选云服务器还是物理服务器 一、为什么需要云服务器或独立服务器取代共享主机 在最早之前,大多数的网站都是共享主机开始的,这里也包含了云虚拟机。这一类的站点还有其他站点都会共同托管在同一台服务器上。但是这种共享机只适用于小的网站&#xff…

Docker-compose容器编排

Docker-Compose介绍 Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关…

项目里程碑有什么作用?设置里程碑时应注意什么?

正如 "里程碑 "一词的原意是表示所走距离的标记,项目中的里程碑也代表着迄今为止已完成的任务或活动。但实际上,里程碑的作用远不止于此。 项目里程碑为何重要? 项目的成功取决于细节。项目里程碑之所以重要,是因为它…

微信小程序的个人博客--【小程序花园】

微信目录集链接在此: 详细解析黑马微信小程序视频–【思维导图知识范围】难度★✰✰✰✰ 不会导入/打开小程序的看这里:参考 让别人的小程序长成自己的样子-更换window上下颜色–【浅入深出系列001】 文章目录 本系列校训啥是个人博客项目里的理论知识…

如何在3ds max中创建可用于真人场景的巨型机器人:第 1部分

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建主体 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 在左侧视口中,按键盘上的 Alt-B 键。它 打开视口配置窗口。 打开“锁定缩放/平移”和“匹配位图”选项。单击“文件”并转到参考 …

JSON格式Python,Java,PHP等封装获取淘宝商品详情SKU数据API方法

淘宝是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝天猫商品详情SKU详细数据,您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品详情Sku信息。以下是两种常用方法的介绍&…

8年测试整理,自动化测试框架从0到1实施,一篇打通自动化...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 框架本身一般不完…

Rust vs Go:常用语法对比(十二)

题图来自 Rust vs Go in 2023[1] 221. Remove all non-digits characters Create string t from string s, keeping only digit characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 删除所有非数字字符 package mainimport ( "fmt" "regexp")func main() { s : hei…

STM32读写内部Flash

内存映射 stm32的flash起始地址为0x0800 0000,结束地址为0x0800 0000加上芯片实际的Flash大小,不同芯片Flash大小不同,RAM同理。 对于STM32F103RCT6,Flash256KB,所以结束地址为0x0803 ffff。 Flash中的内容一般用来存…

Macbook M1编译安装Java OpenCV

OpenCV-4.8.0编辑安装 查询编译依赖 brew info opencv确保所有需要模块都打上了✔,未打✔的需要使用brew进行安装 下载OpenCV源码 在此处下载OpenCV源代码,选择Source,点击此处下载opencv_contrib-4.8.0 或者使用如下命令,通…

集装箱装卸作业相关的知识-Part1

1.角件 Corner Fitting of Container or called Corner Casting. there are eigth of it of one container. 国家标准|GB/T 1835-2006https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcnoD35857F2200FA115CAA217A114F5EF12 中国的国标:GB/T 1835-2006《系列1集…

代码随想录算法训练营day51 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

题目链接309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {if (prices null || prices.length < 2) {return 0;}int[][] dp new int[prices.length][2];dp[0][0] -prices[0];dp[0][1] 0;dp[1][0] Math.max(dp[0][0], dp[0][1] - pr…

2023最新ChatGPT商业运营版网站源码+支持ChatGPT4.0+GPT联网+支持ai绘画(Midjourney)+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

微服务的各种边界在架构演进中的作用

演进式架构 在微服务设计和实施的过程中&#xff0c;很多人认为&#xff1a;“将单体拆分成多少个微服务&#xff0c;是微服务的设计重点。”可事实真的是这样吗&#xff1f;其实并非如此&#xff01; Martin Fowler 在提出微服务时&#xff0c;他提到了微服务的一个重要特征—…

写论文需要注意的点(持续更新)

引言 写论文投稿的时候遇到很多评审给的好的意见&#xff0c;记录下来&#xff0c;在下次写论文的时候谨记这些点&#xff0c;不再犯错 意见 写文章的时候要引用最新的文献做实验的时候将数据集获取的地址和方式记录下来&#xff0c;在文章中标注出来并不是一定要在所有数据…

iptables-netfilter基础

iptables-netfilter基础 课堂笔记 iptables Firewall&#xff1a;防火墙 隔离工具。区别于建筑防火墙。工作于主机或网络边缘&#xff0c;对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测&#xff0c;对于能够被规则匹配到的报文作出相应处理的组件&#xff…