实验11——java线程模拟卖票
package cn.tedu.demo; /**
* @author 赵瑞鑫 E-mail:1922250303@qq.com
* @version 1.0
* @创建时间:2020年7月31日 下午2:28:24
* @类说明: 綫程的生命周期:從創建到消亡。新建狀態:new
* Thread();就緒狀態:start();阻塞狀態:sleep(),wait();運行狀態:run();
* 消亡:執行完run方法的語句就自然消亡了,再次使用須再次創建
* 綫程的優先級:不同優先級:高優先級先執行,低優先級后執行;同一優先級:先到先服務;
* 綫程優先級的定義:怎麽規範綫程的優先級:系統默認綫程的優先級。 人爲設置綫程的優先級。
* 綫程的同步:儅多個綫程共同訪問一個共享變量時,可能會導致共享變量的不完整或者説不安全(解決方案:pv操作)
* 爲了共享變量的安全性,使用同步機制保證共享變量的安全性
* 當一個綫程改變共享變量時,其他綫程不能使用共享變量,儅綫程計算完成後,其他綫程才可以使用共享變量(
* 使用Synchronized關鍵字實現綫程同步;同步塊:Synchronized(鎖對象){操作共享變量的代碼(運算)})
* 在方法Synchronized上用此關鍵字修飾的方法叫做同步方法
*/
public class Demo7 {
private static int ticket = 10; public static void test1() {
Thread r = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (Demo7.class) { if (ticket <= 0) {
try {
throw new Exception("票賣完了");
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
break;
}
} else {
Demo7.ticket--;
System.out.println(Thread.currentThread().getName() + "賣了一張票,還剩" + ticket + "張");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
};
r.start();
} public static void test2() {
Thread t1 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t1");
}
});
Thread t2 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t2");
}
});
Thread t3 = new Thread(() -> {
for (int i = 1; i < 11; i++) {
System.out.println("t3");
}
});
t3.setPriority(Thread.MAX_PRIORITY);
t1.setPriority(Thread.NORM_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
} public static void main(String[] args) {
// TODO Auto-generated method stub test1();
} }
实验11——java线程模拟卖票的更多相关文章
- java多线程实现卖票小程序
package shb.java.demo; /** * 多线程测试卖票小程序. * @Package:shb.java.demo * @Description: * @author shaobn * ...
- java 多线程之卖票两种方式
1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...
- java笔记线程电影院卖票改进版
通过加入延迟后,就产生了连个问题: * A:相同的票卖了多次 * CPU的一次操作必须是原子性的 * B:出现了负数票 * 随机性和延迟导致的 public class SellTicketD ...
- java笔记线程电影院卖票最终版
* 如何解决线程安全问题呢? * * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否会有线程安全问题的标准) * A:是否是多线程环境 * B:是否有共享数据 ...
- JAVA培训—线程同步--卖票问题
线程同步方法: (1).同步代码块,格式: synchronized (同步对象){ //同步代码 } (2).同步方法,格式: 在方法前加synchronized修饰 问题: 多个人同时买票. 1. ...
- 11 java 线程池 使用实例
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 11 java 线程池 实现原理
一 关键类的实现 1 ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的 ...
- C++ 多线程编程实例【2个线程模拟卖火车票的小程序】
原文:http://blog.csdn.net/chen825919148/article/details/7904219 核心提示:从网上搜集来的非常基础的C++多线程实例,刚入门的可以看看,希望能 ...
- java学习多线程之卖票示例
这一节我们来说一个示例就是卖票示例: 需求: 我们现在有100张票,然后分四个窗口来卖,直到卖完为止. 思路: 1.先定一个一个票类,描述票的属性,还有打印卖出的票,并且实现Runnable中的run ...
随机推荐
- Scala 基础(九):Scala 函数式编程(一)基础(一)概念、定义、调用机制
1 概念的说明 1)在scala中,方法和函数几乎可以等同(比如他们的定义.使用.运行机制都一样的),只是函数的使用方式更加的灵活多样. 2)函数式编程是从编程方式(范式)的角度来谈的,可以这样理解: ...
- python爬虫拉钩网:{'msg': '您操作太频繁,请稍后再访问', 'clientIp': '113.57.176.181', 'success': False}
反爬第一课: 在打印html.text的时候总会提示 {'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '113.14.1.254'} 需要 ...
- 在flask中使用flask-migrate管理数据库
Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作. 安装 pip3 insta ...
- 数据可视化之powerBI技巧(一)PowerBI可视化技巧:KPI指标动态展示之TOPN及其他
本文来自星友Beau的分享,在进行数据指标的展现时,对关键的少数单独展示,而对剩余的大多数折叠为其他项,是一个很常用的做法.Beau同学通过一个日常的办公场景,详细介绍了PowerBI实现的步骤,值 ...
- CocosCreator之AssetBundle使用方案分享
前言 Creator2.4 推出了AssetBundle,使得所有平台都有了分包的能力.那么该如何使用这个强大的功能呢?下面介绍一下我个人的用法,仅供参考,水平有限,非喜勿喷. 根据官方文档 指出,之 ...
- 各种jar包下载地址
standard.jar和jstl.jar的下载地址 http://repo2.maven.org/maven2/javax/servlet/jstl/ http://repo2.maven.org/ ...
- 6.ALOHA协议
动态媒体接入控制/多点接入特点:信道并非在用户通信时固定分配给用户. 一.纯ALOHA协议 纯 ALOHA协议思想:不监听信道,不按时间槽发送,随机重发.想发就发 二.时隙ALOHA协议 时隙 ALO ...
- 学习2周C++的收获
学习2周C++的收获 首先,C++是一种实用性很强的程序设计语言.它使用起来灵活.方便,运算符丰富,有结构化的层次…… 那么,我学习这个语言主要是为了参加信息学奥林匹克竞赛,这不仅要熟练地掌握一门语言 ...
- Gradle系列之认识Gradle任务
原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇学习了 Gradle 构建任务的基础知识,了解了 Project 和 Task 这两个概念,建议先阅读前面几篇文章: Gradle系列 ...
- 理解Spring(二):AOP 的概念与实现原理
目录 什么是 AOP AOP 的基本术语 Spring AOP 的简单应用 Spring AOP 与动态代理 Spring AOP 的实现原理(源码分析) 扩展:为什么 JDK 动态代理要求目标类必须 ...