多线程之售票安全版
来源:互联网 发布:java list 随机排序 编辑:程序博客网 时间:2024/05/29 19:41
下面是安全版的售票程序
/*通过分析,发现,打印出0,-1,-2等错票。多线程的运行出现了安全问题。问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完, 另一个线程参与进来执行。导致共享数据的错误。解决办法: 对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。Java对于多线程的安全问题提供了专业的解决方式。就是同步代码块。synchronized(对象){ 需要被同步的代码}对象如同锁。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。火车上的卫生间---经典。同步的前提:1,必须要有两个或者两个以上的线程。2,必须是多个线程使用同一个锁。必须保证同步中只能有一个线程在运行。好处:解决了多线程的安全问题。弊端:多个线程需要判断锁,较为消耗资源,*/class Ticket implements Runnable{ private int tick = 1000; Object obj = new Object(); public void run() { while(true) { synchronized(obj) { if(tick>0) { //try{Thread.sleep(10);}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--); } } } }}class TicketDemo2{ 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(); }}
0 0
- 多线程之售票安全版
- 多线程之售票
- 02_多线程之售票
- 多线程练习程序 之 模拟火车票售票系统01版
- 多线程售票
- iphone多线程练习之火车售票模拟
- 多线程经典之三口同时售票
- Java多线程应用之火车站售票
- java多线程之火车售票系统模拟
- linux多线程编程之java售票程序的移植
- linux多线程编程之java售票程序的移植
- Java 多线程初探索之模拟车站多窗口售票
- *多线程 模拟售票系统
- JAVA多线程售票问题
- 多线程售票(二)
- 多线程售票(一)
- 模拟售票,学习多线程
- 售票 多线程
- VS2002(VC7) 新建arx项目
- test
- HANA激活对象报错
- 设计模式 适配器模式
- omci批量升级
- 多线程之售票安全版
- Creating ADF BC View Object Instances On The Fly!!!!!!
- There is a version mismatch between the spring client and the server
- RTEMS-BBB(七):LED点亮
- Android--SparseArray<E>详细介绍
- 界面布局(2)
- OpenGL环境设置
- C++中malloc/free与new/delete的区别及内存分配失败错误处理
- 【Android应用开发技术:图像处理】Bitmap显示性能优化分析