多线程-线程安全前篇

news/2024/5/6 6:56:33/文章来源:https://www.cnblogs.com/shenziyi/p/16798233.html

线程安全

如果有多个线程在同时运行 而这些线程可能会同时运行这段代码 程序每次运行结果和单线程运行的结果是一样的

而且其他的变量的值也和预期的是一样的 就像线程安全的

演示线程的安全问题:

电影院要买票 我们模拟电影院的卖票过程 本次电影的座位共100个(背场电影只能卖100张票)

我们来模拟电影院的售票窗口 实现多个窗口同时卖出 这场电影票(多个窗口一起卖这个100张票)

需要窗口 采用线程对象来模拟 需要表 Runnable接口子类来模拟

图解:

不正确的代码:

public class DemoTicket implements Runnable {
//定义一个多个线程共享的票源
private int ricket=100;
//设置线程任务:卖票
@Override
public void run() {
//使用死循环 让卖票操作重复执行
while (true){
//加入线程休眠
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
//先判断票是否存在
if (ricket>0){
//票存在 买票 ticket--
System.out.println(Thread.currentThread().getName()+"--->正在买第"+ricket+"张票");
ricket--;
}
}
}
}
class test06{
public static void main(String[] args) {
//创建实现类对象
DemoTicket ticket = new DemoTicket();
//实现线程执行
/*
因为有两张售票口所有要进行出售
*/
new Thread(ticket).start();
new Thread(ticket).start();
}
}

运行结果:

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

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

相关文章

Clickhouse 基础架构

ClickHouse 基础架构 我们从两块来看ClickHouse的基础架构 ClickHouse集群结构ClickHouse 内部结构1. ClickHouse集群结构 ClickHouse 采用了 Multi Master 多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。 多主架构中每个节点对等的角色使…

CSS学习笔记:背景图片样式

CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: 关于背景图片,块元素和行内元素都可以设置背景图片。 但是块元素有宽度和高度,设置之后,图片图片默认往宽和高方向上平铺,对于行内元素,它没有宽度和高…

零售信贷产品的8大业务流程

简单来说,零售信贷业务流程是指做事的方法和步骤,是一个降低成本、规避风险、获取效益,以确保信贷资金的安全性、流动性、盈利性的过程。关注“金科应用研院”,回复“CSDN”领取风控资料合集 通过既定的操作程序,每个…

【第一弹】Python题库刷题---完事开头难,从基础题开始

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

做Web自动化前,你必须掌握的几个技能

每天进步一点点,关注我们哦,每天分享测试技术文章 本文章出自【码同学软件测试】 码同学公众号:自动化软件测试,领取资料可加:magetest 码同学抖音号:小码哥聊软件测试 学习web自动化的前提条件:手工测试(了解各种测试的知识)、学习编程语言、学习Web基础、学习自动化…

sklearn里的逻辑回归,随机森林及SVM应用于指数方向”预测“

原创文章第76篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 backtrader代表传统量化,而qlib代表AI量化,二者的范式不同。 backtrader擅长规则驱动,更像是传统技术分析的“自动化”版本,当…

【附源码】计算机毕业设计SSM民宿网站管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

docsify search插件对多个md文件建索引查找

docsify search插件对多个md文件建索引查找 如果配置了不管用,那应该是浏览器缓存的问题,换个浏览器访问试试看 index.html中配置paths 对应路径即可 官网示例如下图: 附上完整index.html配置 <!DOCTYPE html> <html lang"en"> <head><m…

MySQL—表的增删改查

MySQL—表的增删改查一、Create1.1、单行数据 全列插入1.2、多行数据 指定列插入1.3、插入否则更新1.4 替换二、Retrieve2.1、全列查询2.2、指定列查询2.3、查询字段为表达式2.4、为查询结果指定别名2.5 结果去重2.6 WHERE 条件>, >, <, <,2.7、结果排序2.8、筛选…

分布式锁(Distributed Lock)理论介绍

在多线程环境中&#xff0c;线程之间通常使用互斥锁实现共享资源的独占访问。在多进程环境&#xff0c;特别是分布式环境&#xff0c;常使用分布式锁来实现共享资源的独占访问。简单来说&#xff0c;分布式锁就是指在分布式环境下&#xff0c;通过加解锁实现多节点对共享资源的…

Day2: 正原电子 imx交叉编译环境搭建

imx交叉编译环境搭建 资源下载 https://atk-imx6ull.coding.net/public/imx6ull/05_Tools/git/files/master/01%E3%80%81%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%99%A8 正点原子提供两种交叉编译工具链。这两种交叉编译工具链解释如下图。 第一种 Poky 编译器是Yocto 项…

Entity Framework教程-Entity Framework-模型关系(Model Relationships)

更新记录 转载请注明出处: 2022年10月17日 发布。 2022年10月10日 从笔记迁移到博客。配置实体关系的方式 使用数据特性 使用FluentAPI关系配置 使用关系属性 导航属性(navigation property) 导航属性说明 一个类型为主体实体或从属实体的属性 无论它是指它的父实体还是持有…

Spring源码分析(八)依赖注入源码解析1:autowire自动注入 和 @Autowired注入

Spring中到底有几种依赖注入的方式&#xff1f; 首先分两种&#xff1a; 手动注入自动注入 手动注入 在XML中定义Bean时&#xff0c;就是手动注入&#xff0c;因为是程序员手动给某个属性指定了值。 <bean name"userService" class"com.luban.service.U…

谷粒商城项目学-分布式基础

项目框架图 分布式基础概念 • 微服务、注册中心、配置中心、远程调用、Feign、网关 • 2、基础开发 • SpringBoot2.0、SpringCloud、Mybatis-Plus、Vue组件化、阿里云对象存储 • 3、环境 • Vagrant、Linux、Docker、MySQL、Redis、逆向工程&人人开源 • 4、开发规范 •…

【LeetCode48:旋转图像(附Java代码)】

旋转图像一、题目描述1.题目内容2.样例二、解决方案1.算法流程1&#xff09;分析2&#xff09;算法流程2.Java代码1&#xff09;核心代码2&#xff09;完整测试代码一、题目描述 1.题目内容 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必…

metamask api 请求 一般操作

参考文档&#xff1a;https://docs.metamask.io/guide/ 注意 metamask 必须是运行在站点之下的 web 页进行操作。 一、检查 metamask 是否安装 metamask 提供了 window.ethereum 供开发者对 metamask&#xff08;以太坊网络&#xff09; 进行交互&#xff0c;当然是需要你已…

DO、VO、BO、DTO、POJO

DO:Domain Object 即数据库表字段 在Java中一一对应关系(有人称它实体类) BO:Business Object 即业务对象,Service层向上传传输的对象。是多个DO的组合形式 VO:view oject 展示层对象,通过接口向前端输出展示的对象 DTO:Date Transfer Object 数据传输对象,controll…

《Linux下软件的管理》

【一】Linux软件包yum 什么是软件包&#xff1f; 在Linux下安装软件&#xff0c;一个通常的办法就是下载程序的源代码&#xff0c;并经行编译&#xff0c;既可得到可执行程序&#xff0c;但是这种办法属实是太麻烦了&#xff0c;因为下载要时间&#xff0c;编译要时间&#x…

根文件系统简介

根文件系统 根文件系统一般也叫做rootfs&#xff0c;那么什么叫根文件系统&#xff1f;看到“文件系统”这四个字&#xff0c;很多人&#xff0c;第一反应就是FATFS、FAT、EXT4、YAFFS和NTFS等这样的文件系统。在这里&#xff0c;根文件系统并不是FATFS这样的文件系统代码&…

SpringCloudAlibaba 通过Dubbo实现微服务之间的RPC调用

目录 一、创建模块化项目 二、公共api接口模块 三、服务提供者 四、服务调用者 五、测试 六、案例代码 在微服务架构中&#xff0c;微服务之间的调用一般我们有两种比较好的解决策略&#xff0c;分别是通过OpenFeign的基于http协议的传输的调用和基于RCP协议的Dubbo框架来…