java多线程下模拟抢票
2024-09-07 09:28:49
我们设置三个对象分别同时抢20张票,利用多线程实现.
public class Web123506 implements Runnable{
private int ticteksNums=20;//票数 @Override
public void run() {
while (true){
if(ticteksNums<0){
break;
}
/* try {
//睡眠
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--); }
} public static void main(String[] args) {
// 一份资源
Web123506 web = new Web123506();
//多个代理
new Thread(web,"我们").start();
new Thread(web,"你们").start();
new Thread(web,"黄牛党").start(); } }
运行结果为:
我们-->抢到了20
黄牛党-->抢到了18
你们-->抢到了19
黄牛党-->抢到了16
我们-->抢到了17
黄牛党-->抢到了14
你们-->抢到了15
黄牛党-->抢到了12
我们-->抢到了13
黄牛党-->抢到了10
你们-->抢到了11
黄牛党-->抢到了8
我们-->抢到了9
黄牛党-->抢到了6
你们-->抢到了7
黄牛党-->抢到了4
我们-->抢到了5
黄牛党-->抢到了2
你们-->抢到了3
黄牛党-->抢到了0
我们-->抢到了1
结论:
我们可以看到抢到的票没有重复的,说明线程是安全的.
这时候我们加入线程的睡眠.观察线程此时是不是安全的?
public class Web123506 implements Runnable{
private int ticteksNums=20;//票数 @Override
public void run() {
while (true){
if(ticteksNums<0){
break;
}
try {
//睡眠
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-->抢到了"+ticteksNums--); }
} public static void main(String[] args) {
// 一份资源
Web123506 web = new Web123506();
//多个代理
new Thread(web,"我们").start();
new Thread(web,"你们").start();
new Thread(web,"黄牛党").start(); } }
运行结果:
黄牛党-->抢到了20
我们-->抢到了19
你们-->抢到了18
黄牛党-->抢到了17
我们-->抢到了16
你们-->抢到了15
黄牛党-->抢到了14
我们-->抢到了13
你们-->抢到了12
你们-->抢到了11
我们-->抢到了10
黄牛党-->抢到了9
你们-->抢到了8
我们-->抢到了7
黄牛党-->抢到了6
你们-->抢到了5
我们-->抢到了4
黄牛党-->抢到了3
你们-->抢到了2
我们-->抢到了1
黄牛党-->抢到了0
你们-->抢到了-1
我们-->抢到了-1
结论:
当我们加入线程的睡眠,此时抢到的票可能出现了负数或者会出现两个人抢到了同一张票此时说明加入线程睡眠线程是不安全的.
最新文章
- UI第十节——UISwitch
- HEVC学习之二CTU, CU, CTB, CB, PB, TB
- sacc scss less
- 导出Excel文件(针对Dev)
- 3.SQLAlchemy文档-SQLAlchemy Core(中文版)
- Servlet &; JSP - HttpSession
- 【转】winform与web 按钮button去掉边框
- JADE提升篇
- sql集锦
- SQL Server中将多行数据拼接为一行数据(一个字符串)
- SQLServer脚本编写
- linux常用命令学习笔记
- CF369E Valera and Queries
- codeforces1101D GCD Counting 【树形DP】
- 爬虫_豆瓣电影top250 (正则表达式)
- Rem自适应js---flexible.min.js
- boost.python入门教程 ----python 嵌入c++
- csrfguard3.1 部署笔记
- 修改weblogic的端口
- Easyui 弹出加载中的遮罩的两种方法
热门文章
- webstorm初始化
- Sudoku Killer--hdu1426(数独 跟上一题差不多 但是输入时问题)
- 2018.11.3 PION模拟赛
- 【APUE】线程与信号
- office outlook 無法開啟 outlook 視窗
- 【LeetCode】Swap Nodes in Pairs 链表指针的应用
- react-router-redux
- &;lt;Android&;gt;greenrobot-EventBus,guava-Event Bus的异步实现
- Windows 8.1更新变化
- Spring中注解