多线程之售票
来源:互联网 发布:p2p下载软件哪个好 编辑:程序博客网 时间:2024/05/18 01:34
1、多线程中一个线程不能多次启动,虽然可能程序能运行但是会报异常
此多线程售票程序虽然能实现简单功能,但是有安全问题,
上图中第99张票一共买了两次
多线程之售票安全版
售票
/*需求:简单的卖票程序。多个窗口同时买票。创建线程的第二种方式:实现Runable接口步骤:1,定义类实现Runnable接口2,覆盖Runnable接口中的run方法。 将线程要运行的代码存放在该run方法中。3,通过Thread类建立线程对象。4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 为什么要将Runnable接口的子类对象传递给Thread的构造函数。 因为,自定义的run方法所属的对象是Runnable接口的子类对象。 所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。实现方式和继承方式有什么区别呢?实现方式好处:避免了单继承的局限性。在定义线程时,建立使用实现方式。两种方式区别:继承Thread:线程代码存放Thread子类run方法中。实现Runnable,线程代码存在接口的子类的run方法。*/class Ticket implements Runnable//extends Thread{ private int tick = 100; public void run() { while(true) { if(tick>0) { System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--); } } }}class TicketDemo{ public static void main(String[] args) { Ticket t = new Ticket(); Thread t1 = new Thread(t);//创建了一个线程; Thread t2 = new Thread(t);//创建了一个线程; Thread t3 = new Thread(t);//创建了一个线程; Thread t4 = new Thread(t);//创建了一个线程; t1.start(); t2.start(); t3.start(); t4.start(); /* Ticket t1 = new Ticket(); //Ticket t2 = new Ticket(); //Ticket t3 = new Ticket(); //Ticket t4 = new Ticket(); t1.start(); t1.start(); t1.start(); t1.start(); */ }}
0 0
- 多线程之售票
- 多线程之售票安全版
- 02_多线程之售票
- 多线程售票
- iphone多线程练习之火车售票模拟
- 多线程经典之三口同时售票
- Java多线程应用之火车站售票
- java多线程之火车售票系统模拟
- linux多线程编程之java售票程序的移植
- linux多线程编程之java售票程序的移植
- 多线程练习程序 之 模拟火车票售票系统01版
- Java 多线程初探索之模拟车站多窗口售票
- *多线程 模拟售票系统
- JAVA多线程售票问题
- 多线程售票(二)
- 多线程售票(一)
- 模拟售票,学习多线程
- 售票 多线程
- DP ACdream 喵哈哈村的挑衅
- android中activity传对象对应该注意的地方
- JAVA注释方法及格式
- 正则表达式相关:收录常用的正则表达式
- NSDocumentDirectory NSDocumentationDirectory 的区别
- 多线程之售票
- 指针数组做函数参数的退化
- HBase简介(很好的梳理资料)
- POJ 1721 - CARDS【置换群】
- [leetcode-74]Search a 2D Matrix(c)
- Hadoop集群(第9期)_MapReduce初级案例
- 判断app是在前台还是后台
- go项目make
- eclipse+ EPIC + PadWalker 搭建Windows Perl开发环境