线程示例:多线程卖票
来源:互联网 发布:paxos算法 实现 编辑:程序博客网 时间:2024/05/17 01:39
第一种创建线程方式
class SellWindow extends Thread { private String window;//窗口号,即线程编号 private static int count = 100;//假设有100张票,必须设置成静态,否则每个线程都拥有100张票 SellWindow(String window) { super(window); } public void run() { sell(); } void sell() { while (count > 0) { System.out.println(type + Thread.currentThread().getName() + " 号窗口卖出\"" + this.type + (100 - count) + "\"号票 剩余:" + --count); } }}class SellTicket{ public static void main(String[] args) { //创建四个线程并分别启动 SellWindow sw1 = new SellWindow("001"); SellWindow sw2 = new SellWindow("002"); SellWindow sw3 = new SellWindow("003"); SellWindow sw4 = new SellWindow("004"); sw1.start(); sw2.start(); sw3.start(); sw4.start(); }}
方式二:此法更可取
- 这样把线程任务封装在run()中,单独用Threadc创建四个进程,但是每次传入的参数都是SellWindow对象的,
这样保证票数count属于一个任务对象,不会造成独立使用count现象
当票种多样时,方法一就不行了
class SellWindow implements Runnable{ private String type = "不限"; private int count = 100; SellWindow() { } SellWindow(String type) { this.type = type; } public void run() { sell(); } void sell() { while (count > 0) { System.out.println(type + Thread.currentThread().getName() + " 号窗口卖出\"" + this.type + (100 - count) + "\"号票 剩余:" + --count); } }}class SellTicket{ public static void main(String[] args) { // 创建一个线程任务对象 /* * SellWindow sw1 = new SellWindow( ); Thread t1 = new Thread(sw1); * Thread t2 = new Thread(sw1); Thread t3 = new Thread(sw1); Thread t4 = * new Thread(sw1); t1.start(); t2.start(); t3.start(); t4.start(); */ // 创建两个线程任务,一个卖高铁票,一个动车票 SellWindow swG = new SellWindow("高铁票"); SellWindow swD = new SellWindow("动车票"); // 创建四个线程,分别分种类传入 Thread tg1 = new Thread(swG, "001"); Thread tg2 = new Thread(swG, "002"); Thread td1 = new Thread(swD, "003"); Thread td2 = new Thread(swD, "004"); tg1.start(); tg2.start(); td1.start(); td2.start(); }}
结果:
高铁票001 号窗口卖出”高铁票0”号票 剩余:99
动车票004 号窗口卖出”动车票1”号票 剩余:98
高铁票002 号窗口卖出”高铁票1”号票 剩余:98
动车票003 号窗口卖出”动车票0”号票 剩余:99
高铁票002 号窗口卖出”高铁票3”号票 剩余:96
动车票004 号窗口卖出”动车票2”号票 剩余:97
高铁票001 号窗口卖出”高铁票2”号票 剩余:97
高铁票001 号窗口卖出”高铁票5”号票 剩余:94
……
(打印不是按照顺序是因为还有其他线程在占用CPU)
1 0
- 线程示例:多线程卖票
- 多线程演示:两个线程《卖票》
- 12-多线程(卖票示例)1 2 14-多线程(线程安全问题产生的原因)
- 【java】多线程小例子(卖票示例)
- 多线程卖票
- 线程,卖票
- 卖票线程
- 线程同步问题,线程上锁---多线程“卖票”实例
- 黑马程序员_多线程的卖票示例和同步
- 多线程之多窗口卖票&线程之间的通信
- python中的多线程----以2个线程卖票为例
- Java多线程通信、同步卖票实例--线程安全、详细注释
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- Java 多线程卖票演示
- 多线程,卖票系统
- 多线程之卖票程序
- Java多线程-卖票
- 卖票模拟多线程
- AVI Player with Playmaker actions 使用UGUI显示视频以及控制播放视频 (二)
- 深度学习方法:受限玻尔兹曼机RBM(一)基本概念
- Java NIO系列1:从操作系统的角度剖析I/O
- 树的前中后非递归遍历
- Android触控
- 线程示例:多线程卖票
- EditText弹出软键盘,空白处隐藏
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
- 【数据库】4种视图的特点及应用场景
- CSS hack
- 导航栏设置的颜色和实际的颜色有色差
- 文件同步rsync
- json转换为datatable