实验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 ...
随机推荐
- python中常见的数据类型
str 常用方法 1. 索引(下标) s = 'ABCDEFGHIJKLMN's1 = s[0]print('s[0] = ' + s1) #s[0] = A 2. 切片:顾头不顾尾 s = 'A ...
- class文件的基本结构及proxy源码分析二
前文地址:https://www.cnblogs.com/tera/p/13267630.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...
- 武汉中科通达软件Java工程师初试总结复盘
预约的视频面试时间是中午12点,不过面试官并没有准时到,拖了大概5.6分钟吧.Zoom会议上写着xxxJava工程师初试. 面试官戴着口罩,并没有露脸,看起来与我年龄相仿,感觉很年轻. 在我按着 ...
- networkX.core_number(graph)
今天在学习别人特征工程的时候,看到这样一个函数,max_kcore = pd.DataFrame(list(nx.core_number(graph).items()), columns=[" ...
- Quartz.Net系列(十四):详解Job中两大特性(DisallowConcurrentExecution、PersistJobDataAfterExecution)
1.DisallowConcurrentExceution 从字面意思来看也就是不允许并发执行 简单的演示一下 [DisallowConcurrentExecution] public class T ...
- Python Hacking Tools - Port Scanner
Socket Programming 1. Scan the target Vulnerable Server. And test it by telnet. 2. Write the scanne ...
- Python Ethical Hacking - Bypass HTTPS(1)
HTTPS: Problem: Data in HTTP is sent as plain text. A MITM can read and edit requests and responses. ...
- Fisher算法+两类问题
文章目录 一.Fisher算法 二.蠓的分类问题: 三.代码实现: 一.Fisher算法 二.蠓的分类问题: 两种蠓Af和Apf已由生物学家根据它们的触角和翼长加以区分(Af是能传播花粉的益虫,Apf ...
- Git的自定义和特殊文件配置
目录 备注: 知识点 自定义Git 忽略特殊文件 .gitignore忽略文件 忽略文件的原则是: 忽略文件示例 .gitignore文件查看和强制添加 备注: 本文参考于廖雪峰老师的博客Git教程. ...
- MySQL(二)表的操作与简单数据操作
六大约束:主键约束.外键约束.非空约束.唯一约束.默认约束.自动增加 1.not null非空 2.defaul默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primar k ...