GDPU Java 天码行空12

(一)实验目的

1、掌握JAVA中多线程的实现方法;
2、重点掌握多线程的同步与通信机制;
3、熟悉JAVA中有关多线程同步与通信的方法 ;
4、能使用多线程机制解决实际应用中的线程同步与通信问题。

(二)实验内容和步骤

1、在线售票系统

现有一个在线售票系统,总共有200张票,假设同时有5个人同时在线订票,网络传输延时为3毫秒,试编写程序模拟售票过程。要求分别使用同步代码块与同步方法实现。
进阶设计:当有人订票的数量达到10张后则退出订票系统

💖 TicketSystem.java

public class TicketSystem
{private int tickets = 200; // 总票数private int bookedTickets = 0; // 已订票数public static void main(String[] args){TicketSystem ticketSystem = new TicketSystem();ticketSystem.bookTickets();}// 使用同步代码块实现订票public void bookTicketSyncBlock(){synchronized (this){if (bookedTickets >= 10){System.out.println("订票数量已达10张,订票系统退出。");return;}if (tickets > 0){tickets--;bookedTickets++;System.out.println(Thread.currentThread().getName() + "订到了一张票,剩余票数:" + tickets);} else{System.out.println("票已售罄。");}}}// 使用同步方法实现订票public synchronized boolean bookTicketSyncMethod(){if (bookedTickets >= 10){System.out.println("订票数量已达10张,订票系统退出。");return false;}if (tickets > 0){tickets--;bookedTickets++;System.out.println(Thread.currentThread().getName() + "订到了一张票,剩余票数:" + tickets);return true;} else{System.out.println("票已售罄。");return false;}}// 模拟订票过程public void bookTickets(){Thread[] threads = new Thread[5];for (int i = 0; i < threads.length; i++){threads[i] = new Thread(() -> {for (int j = 0; j < 10; j++){ // 每个线程尝试订票10次
//					bookTicketSyncBlock(); // 或者使用 bookTicketSyncMethod() 来代替 bookTicketSyncBlock()bookTicketSyncMethod();try{Thread.sleep(3);// 模拟网络延迟 3 毫秒} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}}}, "Thread-" + (i + 1));}for (int i = 0; i < 5; i++)threads[i].start();}
}

💖 运行结果

在这里插入图片描述

2、坦克大战

在坦克大战游戏当中,我方坦克和敌方坦克均可以发射炮弹。现只考虑我方坦克发射炮弹的情况,在没有升级前,我方坦克发射的炮弹只有在碰到敌方坦克、障碍物爆炸或越过边界后(可以使用线程休眠一定时间来模拟)才能发射下一发炮弹。请编写程序模拟我方坦克发射炮弹的过程。

💖 Game.java

public class Game
{public static void main(String[] args){Tank friendlyTank = new Tank("我方坦克");// 模拟我方坦克连续发射炮弹for (int i = 0; i < 5; i++){friendlyTank.fireBullet();try{Thread.sleep(5000); // 模拟炮弹发射间隔时间} catch (InterruptedException e){e.printStackTrace();}}}static class Tank{private String name;public Tank(String name){this.name = name;}public void fireBullet(){System.out.println(name + " 发射了一发炮弹!");new Bullet(this).start(); // 创建一个线程来模拟炮弹的移动}}static class Bullet extends Thread{private Tank tank;public Bullet(Tank tank){this.tank = tank;}@Overridepublic void run(){try{// 模拟炮弹飞行时间Thread.sleep(2000); // 假设炮弹飞行2秒System.out.println(tank.name + " 的炮弹飞行了2秒后爆炸了!");} catch (InterruptedException e){e.printStackTrace();}}}
}

💖 运行结果

在这里插入图片描述

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

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

相关文章

STAR-Echo:一种使用时空分析和基于Transformer的影像组学模型预后慢性肾脏病患者 MACE 预后的新型生物标志物

文章目录 STAR-Echo: A Novel Biomarker for Prognosis of MACE in Chronic Kidney Disease Patients Using Spatiotemporal Analysis and Transformer-Based Radiomics Models摘要方法实验结果 STAR-Echo: A Novel Biomarker for Prognosis of MACE in Chronic Kidney Disease…

Python 3.10.14 x64 Windows Installer

目前我的主要Python环境还在3.10版本。 突然发现官网有3.10.14发布了。 &#xff08;一&#xff09;关于Python 3.10.14 发行日期&#xff1a;2024-03-19 此版本中的安全性内容 gh-115399 和 gh-115398&#xff1a;捆绑的 libexpat 已更新到 2.6.0 以解决 CVE-2023-52425&…

Facebook海外企业户/海外企业三不限户稳定性怎么样?

Facebook是做跨境电商卖家最有效的营销工具之一&#xff0c;不过相对的在Facebook上的广告竞争也会越来越激烈。目前外贸行业发展迅速。Facebook作为每天拥有30亿人口的活跃网络平台&#xff0c;约占全球网络用户的30%。平均来说&#xff0c;它的用户愿意每天花60分钟在平台上浏…

高效协同,智慧绘制:革新型流程图工具全解析

流程图&#xff0c;作为一种直观展示工作过程和系统运作的工具&#xff0c;在现代办公和项目管理中发挥着不可或缺的作用。 其优势在于能够清晰、直观地呈现复杂的过程和关系&#xff0c;帮助人们快速理解并掌握关键信息。同时&#xff0c;流程图也广泛应用于各种场景&#xf…

OpenAI发布会最新消息!ChatGPT新功能发布!

关于即将发布的内容&#xff0c;OpenAI 官方帖子提供的唯一细节是&#xff0c;此次发布将更新 ChatGPT 及其最新模型 GPT-4。 OpenAI 员工程博文&#xff08;Bowen Cheng&#xff09;跟了个帖&#xff0c;「比 gpt-5 更酷」&#xff0c;不过又迅速删帖。 OpenAI 的葫芦里到底卖…

网络流量分析:快速排查故障,提升性能的关键利器

网络世界瞬息万变,要时刻掌握网络状况,进行有效的故障排除和性能优化,网络流量分析是不可或缺的重要手段。借助专业的网络流量分析工具,可以全方位洞察网络运行状况,快速定位并解决问题,提升网络性能。 实时洞察网络动态,全面分析网络流量 网络流量分析的核心在于对网络中各类…

vue2 结合iview和百度地图API实现电子围栏

vue2 结合iview和百度地图API实现电子围栏 实现在地图上绘制电子围栏并自定义电子围栏样式&#xff0c;还可以标记中心点 1.百度地图API相关JS引用 <script src"//api.map.baidu.com/api?typewebgl&v1.0&ak百度地图官网申请的ak"></script>//…

绘制过程图,Minitab如何帮助大学生拿下统计学科高分

Madison Bair是Minitab全球总部的一名营销实习生&#xff0c;目前&#xff0c;她正在宾夕法尼亚州的阿罗修斯山学院攻读学位。在进修过程中&#xff0c; 她似乎遇到了一些麻烦事&#xff0c;我们一起来看看&#xff01; 背景— 来自Madison的自述 Hi&#xff01;大家好&…

Dockerfile中yum install 无法使用的问题

记录一次开发中使用Dockerfile进行centos7容器自定义的时候发现yum install无法使用 1. 查看主机是否能够联网 ping www.baidu.com主机能够联网 2. 查看进行Dockerfile进行打包的时候新容器是否联网 在Dockerfile中添加 RUN ping www.baidu.com 发现无法ping通 解决办法 …

基于yolov8+flask搭建一个web版本的网页模型预测系统

测试环境&#xff1a; anaconda3python3.8 torch1.9.0cu111 ultralytics8.2.2 首先我们将训练好的权重放在weights目录下面 并将名字改成yolov8n.pt&#xff0c;如果不想改可以在代码app.py都把路径改过来即可。然后我们打开 python app.py之后看到 我们点击选择文件支持图…

RSAC 2024观察:软件供应链安全进入AI+时代

盘点RSAC会议上软件供应链安全议题的特点、趋势及启示。 网络安全行业备受关注的RSAC 2024刚刚落下帷幕&#xff0c;今年大会的创新沙盒比赛打破了之前五年均有软件供应链安全初创公司进入10强的惯例&#xff0c;但这并未影响软件供应链安全议题成为大会必选项&#xff0c;并引…

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言&#xff1a; 在日常工作中&#xff0c;数据分析中常常涉及搭建指标体系&#xff0c;搭建电商需要接入的电商API接口本文主要以电商为案例&#xff0c;来讲讲如何搭建指标体系。 指标体系的定义&#xff1a; 指标体系是由一系列指标组成的&#xff0c;这些指标是基于不同的…