多线程新手村3--多线程代码案例

news2025/1/18 3:38:33

1.1 单例模式

单例模式是设计模式中非常经典的一种。那么有同学肯定就会好奇了,什么是设计模式呢?

设计模式简单的说就是程序员的“棋谱”,我们下象棋时肯定或多或少都背过棋谱,例如当头炮、马后炮等,设计模式也是这样,开发过程中常常会遇到一些经典场景,用固定的解决方案去解决这些问题,这就是设计模式,今天我们先来介绍一下单例模式。

单例模式是指某个类只能实例化一个对象,不能有多个,这一点在很多场景中都会用到,例如数据库中的DateSource实例就只需要一个;单例模式又有两种实现方式,分别为饿汉模式和懒汉模式。

1.1.1 饿汉模式

在类加载的时候,创建实例(比较急切)

可以看到,由于将构造方法设为私有,所以当我们想要自己实例化一个对象的时候,编译器会报错,此时,这个类将只会有加载类时实例化的那一个对象,无法再实例化出其它对象。

1.1.2 懒汉模式

只有当需要的时候才创建实例

上述代码可以看出,只有当首次调用getInstance方法时才会创建实例,否则将不会创建实例。

单线程中懒汉模式没有问题,但是放在多线程中,就会存在许多bug!

1.1.3 懒汉模式(多线程版)

首先要解决一个疑惑,为什么饿汉模式的单线程都不会有bug,但是懒汉模式的多线程会存在bug呢?是因为饿汉模式的getInstance方法只有读功能,但是懒汉模式的getInstance方法却既可读又可写,两个线程对于同一个变量进行写操作,就很容易出现问题。所以我们要加锁,将操作变为原子性的,这样就不会出现问题了。

1、这里的加锁是为了保证原子性操作,防止代码出bug(new多个对象出来)

2、这里再一次判断对象是否为空是为了确定要不要加锁,因为如果不加这个代码的话,每次调用这个方法都会加锁,但是加锁很费时,效率很低,不好!

3、此处的volatile关键字是为了防止出现指令重排序问题。

1.2 阻塞队列

阻塞队列是多线程代码中常用的一种数据结构。

所谓阻塞队列,其实就是加了阻塞功能的队列。

a)如果队列为空,继续出队列,就会发生阻塞,直到其它线程向队列中加入元素。

b)如果队列为满,继续入队列,也会发生阻塞,直到其它线程向队列中取走元素。

阻塞队列,最大的意义是用来实现“生产者消费者模型”

“生产者消费者”模型的意义:

1、解耦合(单独设置一个队列,使原本两个直接进行数据交互的元素通过这个队列进行交互)

2、削峰填谷

当数据请求量很大的时候,如果没有阻塞队列的话,服务器A一直给服务器B发数据,就可能使服务器B崩溃;但是如果设置一个阻塞队列,那么A只需要将数据放入队列中,如果B此时已达到最大处理负荷的话,那B只需要慢慢的取出队列中的数据处理即可;反之,如果此时数据请求量很小,那么服务器B就可以慢慢地消耗掉堆积在阻塞队列中的数据。

1.3 阻塞队列的代码实现

以上代码就是自己实现了一个简易的阻塞队列,可以用作一个简单的“生产者消费者”模型。注意两个wait和notify都是互相唤醒的,无法自己唤醒自己。

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

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

相关文章

【病毒分析】Babuk勒索家族babyk后缀系列分析--Windows篇

1.背景 1.1 Babuk勒索家族 Babuk勒索家族最早曝光于2021年1月初,在几个月内,它就跻身于最臭名昭著的勒索软件组织之列。自回归以来,它通过在地下论坛上积极宣传自己而获得了更多的知名度。在策略方面,其加密功能与其他勒索软件组…

C++|set、map模拟实现<——红黑树

目录 一、红黑树的迭代器 1.1红黑树迭代器框架 1.2operator*() && operator->() 1.3operator() 1.4operator--() 1.5operator() && operator!() 1.6begin() && end() 二、如何用红黑树搭配map和set(仿函数) 三、红黑树封装map和set(简易版…

图片怎么批量重命名从1到50?这3个方法一键改名

图片怎么批量重命名从1到50?图片批量重命名从1到50的过程不仅提高了我们处理大量图片文件的效率,还大大简化了命名过程,让我们能更加有条理地管理和存储图片。通过使用各种专业的工具和方法,我们可以轻松实现图片文件的自动化命名…

【美羊羊拿金币问题】

问题: 有一天美羊羊正在草地上玩耍,突然天上开始落金币,这些金币掉落的范围在一个固定的水平区域内,但这些金币一旦掉落到地上就消失了,因此美羊羊只有不断地移动并从空中接住这些金币才能得到它们。假设金币掉落的位…

宝兰德入选“鑫智奖·2024金融数据智能运维创新优秀解决方案”榜单

近日,由金科创新社主办、全球金融专业人士协会支持的“2024 鑫智奖第六届金融数据智能优秀解决方案”评选结果正式公布。凭借卓越的技术实力和方案能力,宝兰德「智能全链路性能监控解决方案」从90个参选方案中脱颖而出,荣誉入选“鑫智奖2024金…

关于C++的IO流简单总结

基础IO流 C的IO以面向对象的形式实现, 同时兼容了C语言面向过程的IO方式 C 标准库提供了四个基本流对象: cin:用于从标准输入(通常是键盘)读取数据。 cout:用于向标准输出(通常是控制台)写入…

【云原生】kubernetes中的认证、权限设置--RBAC授权原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

自动化使用 ChatGPT 生成 PPT 大纲 - 基于 Python 和 PyAutoGUI

这篇文章将指导您利用 Python 的 pyautogui 库创建一个自动化的脚本,帮助您使用 ChatGPT 生成公司智能管理平台的 PPT 大纲。该脚本将打开 Chrome 浏览器,访问 ChatGPT 并输入相应的提示词,让 ChatGPT 为您创建 PPT 大纲。 C:\pythoncode\ne…

为什么宋以前权臣篡位多、宋以后权臣篡位少?

时代不同,主要问题也不同。天下的大气候,自然就要左右王朝的小气候。权臣篡位,得先有权臣。但是,如果当权臣都没有了,又怎么可能有权臣篡位呢?这是一个社会基础的变化。宋以后的主要矛盾是中原和草原的争锋…

白酒:白酒产地的地域文化与品牌形象

云仓酒庄豪迈白酒,作为中国白酒的一部分,其品牌形象深受产地的地域文化影响。地域文化是一个地区与众不同的文化传统和价值观,它影响着当地人的生活方式和审美观念,进而影响白酒的品牌形象。 首先,白酒产地的历史与传统…

质量工具系列之Dependency-Track

项目开发中依赖了很多第三方开源工具,对于其版本,漏洞等因为时间或者是数量太多而无法关注到,Dependency-Track解决这些问题。 Dependency-Track 是一个开源组件分析平台,是开放网络应用安全项目(OWASP)的一…

电源小白入门学习8——电荷泵电路原理及使用注意事项

电源小白入门学习8——电荷泵电路原理及使用注意事项 电荷泵简介电荷泵原理电荷泵设计过程中需要注意的点fly电容的安秒平衡DC/DC功率转换技术对比 电荷泵简介 电荷泵(Charge Pump)是一种电路拓扑结构,用于实现电压升压或降压的功能。它通过…

实战15:bert 命名实体识别、地址解析、人名电话地址抽取系统-完整代码数据

直接看项目视频演示: bert 命名实体识别、关系抽取、人物抽取、地址解析、人名电话地址提取系统-完整代码数据_哔哩哔哩_bilibili 项目演示: 代码: import re from transformers import BertTokenizer, BertForTokenClassification, pipeline import os import torch im…

POLARDB:新零售用户MySQL上云最佳选择

什么是云数据库POLARDB? POLARDB是阿里云自主研发的最新一代RDS关系型数据库,是特别针对互联网场景设计的Cloud-Native 云原生数据库。POLARDB for MySQL版本,在提供100%兼容MySQL5.6/8.0的关系型事务处理ACID特性之上,能够提供完…

【NumPy】掌握NumPy的histogram函数:数据直方图的生成与应用详解

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

基于序列深度学习模型的向量海岸线形状分类方法 2024.05

本文中提出了一个数据驱动的方法来分类的形状矢量海岸线,该方法利用基于序列的深度学习算法对海岸线矢量分段进行建模和分类。具体而言,首先将复杂的海岸线划分为一系列弯曲,并进一步提出了一组不同的特征来描述每个弯曲的形态特征。然后&…

Vue热更新出现内存溢出

Vue热更新出现内存溢出 vue-cli2遇到此问题的解决办法:vue-cli3遇到此问题的解决办法:方法一(已测试ok)方法二(未尝试) 开发项目有一段时间了,随着项目越来越大,打包的时间也相应的变…

英语写作AI怎么使用?分享3款AI写作生成器

英语写作AI怎么使用?在日常生活中,英语写作AI工具的使用已经变得日益普遍。它们凭借先进的人工智能技术,不仅快速整理思路、生成文章草案,甚至进行语法检查和拼写修正,大大提高了写作的便捷性和效率。下面,…

旅游推荐管理系统

代码位置:旅游管理系统: 根据若依模版的一个旅游管理系统 - Gitee.com 分支dev 项目介绍 项目目的 随着社会的高速发展,人们生活水平的不断提高,以及工作节奏的加快,旅游逐渐成为一个热门的话题,因为其形式的多样,涉…

【数据结构】二叉搜索树——高阶数据结构的敲门砖

目录 树概述 二叉搜索树概述 概念 特性 元素操作 插入 删除 模拟实现 框架 查找 插入 删除 树概述 树——在计算机中是一种很常见的数据结构。 树是一种很强大的数据结构,数据库,linux操作系统管理和windows操作系统管理所有文件的结构就是…