JAVAEE---多线程

wait和notify--等待通知机制

当一个线程条件不满足,进入wait等待。其他线程这个时候获取到锁进行一系列操作后用notify唤醒线程,线程重新参与竞争。wait和join一样,也有两个版本,死等和按时间等待。

wait和sleep的区别

两者都可按时间休眠。但一般情况下,wait等待时间是兜底的,一般到时间前唤醒,sleep一般会到等待时间,直接唤醒是不正常操作。两者刚好相反。

多线程代码案例

单例模式

1)饿汉模式

饿,就是很迫切。它在线程加载过程中就被创建。

当类加载过程中,已经实例好了,提供了外部不可调用的构造方法,防止其他人创建新的实例。

2)懒汉模式

懒,就是能不创建就不创建,所以它是在使用的时候才创建

由于懒汉模式是线程不安全的,所以我们要加锁来保证只创建一个实例。

但是创建只创建一次,难道我每次进来都要加锁判断吗,这样会影响代码效率,所以我们做出以下改进。

我们在这里在套一个if判断,当后面进来就不用加锁了。

但是当我们考虑指令重排序的时候,上述代码又有问题了。

指令重排序是编译器优化的一种方式。

instance = new SingletonLazy();

我们在创建一个对象的时候,这一步可以分为三个步骤。

1.申请内存空间

2.调用构造方法

3.将地址给到变量

正常执行时1,2,3 没有问题,但编译器优化后可能就是1,3,2 这就有问题了。我们两个线程,一个执行到第3步,地址已经给了,但里面没有东西,全是0值,这时候另一个线程进去发现不为空,就直接返回了这个地址,但里面东西还等着初始化呀!!!这时这样值用来操作肯定就会出现问题。

解决这个问题还是用到volatile,它有两个作用,第一个就是内存可见性问题,第二个就是指令重排序

加上之后就不会出现上述问题。

多线程队列

阻塞队列

1.阻塞队列线程安全

2.队列空出队阻塞,队列满入队阻塞

基于阻塞队列实现生产者消费模型,这个生产者消费模型有两个作用。

1.解耦合

这个模型耦合性太高,b挂了的话a可能跟着就挂了。

当我们引入一个阻塞队列/消息队列的时候就可以让b,c按照原来的速度进行运算,以为a的抗压能力要比b/c强很多的。

阻塞队列时一个数据结构,消息队列通过这个数据结构来实现。本质时一样的。

2.削峰填谷

其实我在解耦合那已经提过了,就是当我们引入一个阻塞队列/消息队列的时候就可以让b,c按照原来的速度进行运算,以为a的抗压能力要比b/c强很多的。

我们经常说挂了,挂了的意思其实就是任何一个硬件吃满了

当突然请求很多就会阻塞,然后又很少,我们队列里有元素,也不会无事可做。

BlockingQueue这是标准库提供的一个接口。可以实现三个方法。ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue。与前面不同就在于它有阻塞功能。但他提供的方法与前面不太相同。主要有两个,put入队列,take出队列。

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

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

相关文章

【KPDK】概述

DPDK的主要目标是为数据平面应用程序中的快速数据包处理提供一个简单、完整的框架。用户可以使用代码来理解所采用的一些技术,构建原型或添加自己的协议栈。可提供使用DPDK的替代生态系统选项。 DPDK框架通过创建环境抽象层(EAL)为特定环境创…

如何在Rocky Linux中安装nmon

一、环境基础 [rootlocalhost nmon16d]# cat /etc/redhat-release Rocky Linux release 9.2 (Blue Onyx) [rootlocalhost nmon16d]# uname -r 5.14.0-284.11.1.el9_2.x86_64 [rootlocalhost nmon16d]# 二、安装步骤 在Rocky Linux和AlmaLinux等基于RHEL 的发行版上&#xff…

剪切空间与归一化设备坐标【NDC】

有了投影变换的知识,我们现在可以讨论剪切空间(Clip Space)和 归一化设备坐标(NDC:Normalized Device Coordinates)。 为了理解这些主题,我们还需要深入了解齐次坐标的有趣世界。 NSDT工具推荐&…

【PTA-C语言】实验三-循环结构I

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验三-循环结构I 7-1 求交错序列前N项和 (分数 15)7-2 寻找250(分数 15)7-3 最大公约数和最小公倍数(分数 15)7-4 统计字符&#xff0…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询: 语法: 2、range查询:(范围查询) 语法: 三、地理查询 1、geo_bou…

Springboot如何快速生成分页展示以及统计条数

这是表结构: 前置知识: 分页查询公式(): -- 推导一个公式 -- select * from emp -- order by empno -- limit 每页显示记录数 * (第几页-1),每页显示记录数 统计条数公式: select count…

【动态规划】LeetCode-931.下降路径最小和

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代,博客已经成为许多人分享观点、经验和知识的重要平台。然而,对于博主们来说,每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题,一些创新的工具应运而生,其中包括WordPress的…

Collection的其他相关知识

前置知识:可变参数 就是一种特殊参数,定义在方法 构造器的形参列表里,格式是:数据类型...参数名称; 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它&#xff…

爬虫学习(三)用beautiful 解析html

安装库 import requests from bs4 import BeautifulSoup headers {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"} for start_num in range(0,250…

【工作生活】汽车ECU开发内容简介

目录 1. 目标 2. 要分享什么 3.1 行业知识 3.1.1车载行业知识: 3.1.2项目: 3.1.3开发测试工具: 3.2 硬件平台 3.3 基础知识 3.4 工作生活 3. 我们是谁 1. 目标 随着新能源汽车的快速崛起,汽车电子行业开始快速发展&…

设计模式-结构型模式之外观设计模式

文章目录 七、外观模式 七、外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了…

关于微信小程序中如何实现数据可视化-echarts动态渲染

移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。 基础使用 首先在GitHub上下载echarts包 地址:https://github.com/ecomfe/echarts-for…

【JavaEE初阶】Thread 类及常见方法、线程的状态

目录 1、Thread 类及常见方法 1.1 Thread 的常见构造方法 1.2 Thread 的几个常见属性 1.3 启动⼀个线程 - start() 1.4 中断⼀个线程 1.5 等待⼀个线程 - join() 1.6 获取当前线程引用 1.7 休眠当前线程 2、线程的状态 2.1 观察线程的所有状态 2.2 线程状态和状…

大数据Hadoop-HDFS_架构、读写流程

大数据Hadoop-HDFS 基本系统架构 HDFS架构包含三个部分:NameNode,DataNode,Client。 NameNode:NameNode用于存储、生成文件系统的元数据。运行一个实例。 DataNode:DataNode用于存储实际的数据,将自己管理…

Buzz库python代码示例

Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…

大数据Doris(三十二):Doris高级功能

文章目录 Doris高级功能 一、​​​​​​​表结构变更

hql面试题之字符串使用split分割,并选择其中的一部分字段的问题

版本&#xff1a;20231109 1.题目&#xff1a; 有两张表,a表有id和abstringr两个字段&#xff0c;b表也有id和bstr两个字段&#xff0c;具体如下 A表&#xff1a; 1abc,bcd,cdf2123,456,789 B表: 1acddef2123456 在a表的abstring字段中用‘,’分割&#xff0c;并取出前两…