买票问题


/**
 * 买票问题
 */
public class ThreadTrain1 implements Runnable {
    private int count = 10;
    private static Object o = new Object();
    @Override
    public void run() {
        while (count>0){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            sale();
        }
    }

    private void sale() {
        // 前提 多线程进行使用、多个线程只能拿到一把锁。
        // 保证只能让一个线程 在执行 缺点效率降低
        synchronized (o){
            if (count>0){
                System.out.println(Thread.currentThread().getName()+",出售第"+(10-count+1)+"张票");
                count--;
            }
        }
    }
    public static void main(String[] args){
        ThreadTrain1 train1 = new ThreadTrain1();
        Thread t1 = new Thread(train1,"1号窗口");
        Thread t2 = new Thread(train1,"2号窗口");
        t1.start();
        t2.start();
    }
}

/**
 * 多个线程想要同步,必须用同一把锁
 */
public class ThreadTrain1 implements Runnable {
    private int count = 10;
    private static Object o = new Object();
    public boolean flag = true;
    @Override
    public void run() {
        if (flag){
            synchronized (this){
                while (count>0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (count>0){
                        System.out.println(Thread.currentThread().getName()+",出售第"+(10-count+1)+"张票");
                        count--;
                    }
                }
            }
        } else {
            sale();
        }
    }

    private synchronized void sale() { //非静态同步函数用的是this锁
        while (count>0){
            if (count>0){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+",出售第"+(10-count+1)+"张票");
                count--;
            }
        }
    }
    public static void main(String[] args) throws InterruptedException{
        ThreadTrain1 train1 = new ThreadTrain1();
        Thread t1 = new Thread(train1,"1号窗口");
        Thread t2 = new Thread(train1,"2号窗口");
        t1.start();
        Thread.sleep(40);
        train1.flag = false;
        t2.start();
    }
}

转载于:https://www.cnblogs.com/fly-book/p/11439328.html

18.买票问题 多个线程运行的地方,有ticketWindow和threadList两个变量,ticketWindow中有共享变量count的修改。threadList也是被多个线程共享并执行添加操作,但是Vector本身就是线程安全的,所以不用考虑。但是ticketWindow中的sell方法对共享变量count进行了修改操作,需要加锁来保证线程安全问题。 阅读详情

相关推荐

深入解读ATPG Pattern类型:除了Basic Scan,Clock PO和RAM Sequential模式怎么用?

本文深入解析ATPG高级Pattern类型,包括Clock PO和RAM Sequential模式的应用策略。通过Mentor DFT工具链中的Tessent平台,详细介绍了这些模式的工作原理、配置命令及实战案例,帮助提升芯片测试的故障覆盖率和效率。特别适用于处理时钟域交叉和嵌入式存储器的复杂电路测试需求。

weixin_27697385的博客 486

Java多线程 while内try/catch 导致自动清除中断信号

文章目录while内try/catch 导致自动清除中断信号 while内try/catch 导致自动清除中断信号 示例代码如下 while循环内部, 进行了Thread.sleep(10)的try catch public class CantInterrupt { public static void main(String[] args) throws InterruptedException { Runnable runnable = () -> {

Java持续实践 1051

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

【java】【09】正确处理Thread.sleep(10)的异常

参考文档 https://blog.csdn.net/blog_empire/article/details/86693851 1.demo package com.br.doublelive.redis; import javafx.concurrent.Worker; public class InterruptExceptionTest { public static void main(String[] args) throws InterruptedException {

huiyanshizhen21的博客 2221

GraphRAG 与 HippoRAG 深度对比:在 RAGFlow 中如何选择知识图谱方案?

本文深入对比了GraphRAG与HippoRAG在RAGFlow中的知识图谱构建方案,分析了两者在技术架构、资源消耗和场景适配性上的核心差异。GraphRAG适合需要快速响应和资源有限的场景,而HippoRAG则更适用于精确关系推理的专业领域。文章还提供了RAGFlow的演进路线和选型决策框架,帮助架构师根据实际需求做出合理选择。

weixin_27889245的博客 246

从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)

本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。

salt9的博客 654

多线程(二十七)

多线程 第1章多线程 1.1线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 我们通过一个案例,演示线程的安全问题: 电影院要卖票,我们模拟电影院的卖票过程。假设要播放的电影是 “功夫熊猫3”,本次电影的座位共100个(本场电影只能卖100张票)。 我们来模拟电影院的售票窗口,实...

weixin_44567943的博客 335

Vivado时序违约小结

目录1. setup time违约1.1 逻辑级数太高1.2 Fanout太大2. hold time 违约2.1 异步信号处理导致hold time违约 1. setup time违约 建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大,当然也可以尝试通过降频来解决建立时间违约。 1.1 逻辑级数太高 Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能

mu_guang_的博客 7155

程序中try{}catch(Exception e){e.printStackTrace() ;}中的e.printStackTrace() ;}

程序中try{}catch(Exception e){e.printStackTrace() ;}中的e.printStackTrace() ;}当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称,然后e(引用)会自动调用Exception类中指定的方法,也就...

qq_41210419的博客 1万+

SE (3) -Transformers:三维旋转 - 平移等变注意力网络

E (3) 变换器,这是一种用于三维点云和图的自注意力模块变体,在连续三维旋转平移下具有等变性。注意力机制的计算量会随着点云规模的增大呈二次方增长,因此引入邻域的概念是很有必要的:每个点不再关注所有其他点,而只关注其最近的邻点。注意力机制此前已在图的领域中以内部注意力、自注意力、顶点注意力或图注意力等名称被引入 [17, 31, 32, 12, 26]。等变性意味着当输入数据发生旋转或平移时,模型的输出也会以相应的、可预测的方式进行变换,从而保证模型性能的稳定性和可预测性。

qq_49786473的博客 1480

2.4 提示词优化

我们在使用大模型的时候,同一任务使用不同表述的提示词,可能得到差异巨大的结果,因为模型的性能高度依赖输入提示词的质量。我们可以通过提示词优化来更高效地获取理想输出。

从0到1,突破自己 1010

如何处理InterruptedException异常

InterruptedException简单描述InterruptedException异常是一个经常被误解的异常,通常情况下我们会忽视或则转化成RuntimeException并抛出:throw new RuntimeException(e);然而这种做法通常都是不正确的。InterruptedException出现一般都是因为在线程执行的时候被打断(interrupt),线程(A)不是自己打断自

JC的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

算法-买票问题

题目描述:现在有n个人排队买票,已知是早上八点开始卖票,这n个人买票有两种方式,第一种是每个人都可以单独去买自己的票,第i个人花费i秒,第二种是每个人都可以选择和后面的人一起买票,第i个人和第i+1个人一共花费b[i]秒。最后一个人只能和前一个 ...

qq_23594799的博客 3037

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[BOP][Beauty of Programming][MSRA] 从“买票问题”谈起

问题(买票问题): 在一场激烈的足球赛开始前,售票工作正在紧张地进行中。 已知: 1.每张球票为50元。 2.现在有2n个人排队购票, 其中有n个人手持50元钞票,另外n个人手持100元钞票, 假设开始售票时,售票处没有零钱。 问:这2n个人有多少种排队方式,不至使售票处出现找不开钱的局面? 摘要: 通过对买票找零问题的分析,迁移到括号匹配问题,得到递推式。并通过数...

banglu4273的博客 295

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode c语言-Generate Parentheses和买票找零问题

Title: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: [ "((()))", "(()())", "(())()",

hahachenchen789的博客 1719

多线程-三个窗口买票问题

//线程不安全 加同步锁 /* * sybchronized(对象){}代码块 * sybchronized方法 * */ public class 三窗口买票 { public static void main(String[] args) { S s=new S(); Thread t1=new Thread(s); Thread t2=new Thread(s); Thread t3=new Thread(s); t1.setName("一号窗口"); t2.set

qq_45162113的博客 670

C++ 合辑——买票问题

hello,大家好,本人小侠雨落,给大家带来合辑5—— 买票问题 买票问题1: 我是个孩子 公交车是一项社会公共服务,体恤老人家和孩子,如果一个孩子的身高不超过1.1米,是不需要买票的。 现在知道一个孩子的身高请你编程判断,这个孩子是否需要买票。 输入: 一个实数x,表示孩子的身高; 输出: 如果需要买票,输出yes 否则输出no #include<cstdio> int main()...

weixin_46692659的博客 2077

Thread买票这个案例问题分析

今天,写了一个写了一个买票的案例,测试多线程访问的问题,结果打印总是某一个线程,其他线程都不能进来,下面贴下代码                   一。错误代码                                                     打印结果如下                                             

K_122的博客 633

问题 1163: 【排队买票】

时间限制: 1Sec 内存限制: 128MB 提交: 484 解决: 199 题目描述 有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互换,也算是一种新的排法。(M<=10) 输入 输入一行,M,N,K(其中M=N+K,M<=10). ...

WhileTrue 651

从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南

本文来自于《编程之美》4.3节买票找零问题的启发,和网络上多如牛毛的介绍卡特兰数的文章不同,本文的主要目的不是向读者再一次介绍它的性质和应用,也不是相关内容的简单复制粘贴拼凑,而是一个完整的体系,帮助读者跨越《编程之美》留下的陷阱,找寻一般化的卡特兰数,从而解决更一般的问题,并给出证明和程序实现。

Cyberspace 3890

买票看电影的问题

Question: 有 2n 个人排队进电影院,票价是 50 美分。在这 2n 个人当中,其中 n 个人 只有 50 美分,另外 n 个人有 1 美元(纸票子)。愚蠢的电影院开始卖票时 1 分 钱也没有。 问: 有多少种排队方法 使得 每当一个拥有 1 美元买票时,电影院都有 50 美 分找钱(注: 1 美元=100 美分,拥有 1 美元的人,拥有的是纸币,没法破成 2 个 50 美分) 数学理解...

OzupeSir 1263

买票感悟——全面的去看待问题

      今天是双休,为了赶早买火车票也不得不起个早了。九点到售票处去买回程票(从西安到上海的票),上周已经买好了去的票。自己也考虑到了国庆高峰时间,7,8号的票肯定不好卖了,所以去的还比较早。到那一问,Z94列车,7号的票已经卖光了,8号的也只有站票。自己当时心里有点急,就忙打电话问我朋友,站票行不,可是路程太远了,说到时也麻烦。她说让她朋友在西安那边问问。那我只能在这边等了,看那边能不能买到

一路前行————我的梦想,我的未来 546

使用多线程模拟卖票买票问题

模拟卖票和买票,测试代码是否会出现线程安全问题。 import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; import java.util.Vector; @Slf4j public class 买票卖票 { public static void main(String[] args) throws InterruptedException { TicketWin

二进制杯莫停的博客 542
上一篇: 0001.第一个多线程demo--分批处理数据
下一篇: atomic 原子操作的类
dffxwe51549
博客等级 码龄12年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值