【Java多线程】线程的安全问题

news2025/1/18 10:46:43

根据上篇文章买票问题举例,还可能出现的问题:

 

代码如下:


class Window1 implements Runnable{

    private static int ticket = 100;
    @Override
    public void run() {
        while (true){
            if (ticket > 0){
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);
                ticket--;
            }else {
                break;
            }
        }
    }
}
public class WindowTest1{
    public static void main(String[] args) {
        Window1 w = new Window1();

        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();

    }
}

运行结果如下:

 

 我们可以看到出现了“0”票。

 

因为在此阻塞了,可能出现上文的极端状态

假如

 这样重票的概率就大了

所以不管在哪里阻塞都会出现重票,错票

=========================================================================

引入问题:买票过程中,出现了重票,错票 --> 出现了线程的安全问题
问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来,也操作车票
如何解决?
根据生活中的事情举例:
假如你在上厕所,另一个人很急,冲进了你所在的厕所。这就出现了安全问题。应该如何解决?
答:把厕所门锁住
当一个线程a在操作ticket的时候,其他线程不能参与进来,直到线程a操作完成ticket时,
其他线程才可以开始操作ticket。这种情况即使线程a出现了阻塞,也不能被改变。

感谢观看!!!

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

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

相关文章

网站优化与seo的方法(seo的优化基础)

SEO优化的常规思路,别全以转化为目标 SEO优化作为现在公司推广营销的基础,几乎每个公司都在做这件事。这种优化既可以提升品牌知名度,又能直接给公司带来流量,确实让不少公司感觉很有用。但是在持续的过程中,又会觉得…

ESP32 Arduino 学习篇(五)TFT_eSPI库

前期准备:1.TFT_eSPI库的安装首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。2.TFT_eSPI库的配置文件配置该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。User_Setup.h — 由自己定…

PCB阻焊层介绍与设计经验总结

🏡《总目录》 目录1,什么是阻焊层2,阻焊层的用途,3,阻焊层的工艺流程4,阻焊设计的注意事项1,什么是阻焊层 阻焊层是顶层或底层布线层表面的顶层保护层,就是PCB表层的绿油层,在阻焊层…

【坤坤讲师--图】Dinic

Dinic是个很神奇的网络流算法。它是一个基于“层次图”的时间效率优先的最大流算法。层次图是什么东西呢?层次,其实就是从源点走到那个点的最短路径长度。于是乎,我们得到一个定理:从源点开始,在层次图中沿着边不管怎么走,经过的路径一定是终点在剩余图中的最短路。(摘自…

疫情时代的宠儿:抗生素行业,今后何去何从

本文由前嗅数据研究院出品 自2020年COVID-19流行开始,已经过去了3年,医药行业发生巨大的变化,各种大中小企业实现了一系列调整。疫情将近结束的时候,让我们回顾分析一下近年来医药领域抗生素行业相关发展。 本研究将从行业现状、…

SpringBoot+Vue核酸预约系统

简介:本项目采用了基本的springbootvue设计的核酸预约系统。详情请看截图。经测试,本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVue核酸预约系统源码作者LHL项目类型Java EE项目 (前后…

计算机网络基础知识总结

计算机网络基础知识总结 如果说计算机把我们从工业时代带到了信息时代,那么计算机网络就可以说把我们带到了网络时代。随着使用计算机人数的不断增加,计算机也经历了一系列的发展,从大型通用计算机 -> 超级计算机 -> 小型机 -> 个人…

Windows驱动环境配置

windows驱动开发视频教程(2023最新版)_哔哩哔哩_bilibili 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Learn 确认本机操作系统版本 安装操作系统版本对应的Visual Studio 我的机器是1904可以安装vs2019,但是实际上我装的是vs2017也是没有问题的 安…

泼辣修图2023最新网页版MAC电脑手机修图软件功能介绍

泼辣修图5.11.4最新版为用户带来更多新版的修改工具,进一步优化相关的设备,可以更舒畅的使用去修改图片,还有很多贴纸,文字等等小工具使用,丰富照片情景。 适用于Windows的泼辣修图摄影爱好者都在用泼辣处理照片 泼辣…

并发编程学习案例-ReentrantReadWriteLock非公平的情况下读锁插队和写锁插队场景复现

文章目录一、前言二、源码三、 代码案例(一)复现写的时候插队场景参考执行结果(二)复现读的时候插队参考执行结果参考资料一、前言 Java ReentrantReadWriteLock 是 ReadWriteLock 的实现类,可以分出2把锁,…

OpenCV 图像形态学处理

本文是OpenCV图像视觉入门之路的第11篇文章,本文详细的在图像形态学进行了图像处理,例如:腐蚀操作、膨胀操作、开闭运算、梯度运算、Top Hat Black Hat运算等操作。 OpenCV 图像形态学处理目录 1 腐蚀操作 2 膨胀操作 3 开闭运算 4 梯度运…

57.Isaac教程--定位监视器

定位监视器 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 检测异常系统状态并采取纠正措施有助于确保稳定的系统性能和与预期行为的最小偏差。 为此,Isaac SDK 提供了一个监控框架,可以搭载多种系统观察组件。 该框架目…

达芬奇18.1.2软件更新内容及安装教程(WinMac)

DaVinci Resolve v18.1.2是一款在同一个软件工具中,将剪辑、调色、视觉特效、动态图形和音频后期制作融于一身的解决方案!它采用美观新颖的界面设计,易学易用,能让新手用户快速上手操作,还能提供专业人士需要的强大性能…

【论文速递】WACV2023 - 循环相似注意力的小样本医学图像分割

【论文速递】WACV2023 - 循环相似注意力的小样本医学图像分割 【论文原文】:Few-shot Medical Image Segmentation with Cycle-resemblance Attention 获取地址:https://arxiv.org/pdf/2212.03967.pdf博主关键词: 小样本学习,语…

SpringCloud系列(九)[docker 篇] - Centos 7 下 Docker 的安装及基本操作指令

本篇文章将详细介绍 Centos 7 下 Docker 的安装以及一些基本操作指令. DockerDocker 的安装步骤Docker 基本操作指令Docker 的安装步骤 步骤一: 确保自己电脑的虚拟机联网并安装了 yum 工具, 如果没有安装 yum, 则执行下面的命令; yum install -y yum-utils \device-mapper-p…

力扣:多数元素(详解)

前言:本期是关于多数元素的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读 今天你c了吗? 题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元…

Python爬虫实战之哔哩哔哩二维码登录申请

前言 哈喽,好久不见了吧,各位新年好!博主春节也是比较忙的,没时间去写文章和"coding"。最近我们学校也是初九就开学了,所以更加没时间创作了🤣 言归正传,本次写这篇文章算是想要对我…

软件测试基础(五) 之 了解测试团队的组织架构

今天来了解一下软件测试团队的组织架构模式到底是什么样子。测试团队的组织架构模式的分类一个公司软件测试的组织架构,可能会决定你未来的成长空间,同时也决定了我们的工作模式到底是什么样子。现在测试行业内通常测试团队的组织架构主要分成两种&#…

亚马逊站内流量太少,如何拓展流量渠道增加产品销量?

近两年,经历了行业大洗牌之后,由于入驻平台卖家逐日增多,站内广告成本越来越高,想要抢占更多的站内流量变得愈发困难,一天出不了几单的情况也随处可见。因此,当站内流量的获取遭遇瓶颈,卖家想要…

阿里二面:RocketMQ 消费者拉取一批消息,其中部分消费失败了,偏移量怎样更新?

大家好,我是君哥。最近有读者参加面试时被问了一个问题,如果消费者拉取了一批消息,比如 100 条,第 100 条消息消费成功了,但是第 50 条消费失败,偏移量会怎样更新?就着这个问题,今天…