卖票系统同步问题
来源:互联网 发布:人工智能电影在线看 编辑:程序博客网 时间:2024/05/17 02:16
public class Ticket implements Runnable{private int num = 50;@Overridepublic void run() {while(true){if(num > 0){System.out.println(Thread.currentThread().getName() + "卖出第" + (51-num) + "张票");num--;}else{break;}}}public static void main(String[] args) {//两线程要共享同个对象Ticket t = new Ticket();new Thread(t).start();new Thread(t).start();}}
以上数据混乱,数据不正确
public class Ticket2 implements Runnable{private static int num = 50;@Overridepublic void run() {while(true){if(num > 0){System.out.println(Thread.currentThread().getName() + "卖出第" + (51-num) + "张票");num--;}else{break;}}}public static void main(String[] args) {//两线程要共享同个对象Ticket2 t = new Ticket2();new Thread(t).start();new Thread(t).start();}}以上数据混乱,数据不正确
public class Ticket3 implements Runnable{private static int num = 50;@Overridepublic void run() {while(true){//这个是对象锁,要么全部执行,要么全部不执行,类似于事务//synchronized修饰非静态成员方法默认为this锁synchronized(this){if(num > 0){//有两处代码以上会产生并发操作,会导致数据混乱,必须加锁System.out.println(Thread.currentThread().getName() + "卖出第" + (51-num) + "张票");num--;}else{break;}}}}public static void main(String[] args) {//两线程要共享同个对象,执行的是同一个run方法Ticket3 t = new Ticket3();new Thread(t).start();new Thread(t).start();}}
以上正确了,也可改用继承线程的方式实现,代码如下:
public class Ticket3 extends Thread{private static int num = 50;@Overridepublic void run() {while(true){//此时不能用对象锁了,两线程执行各自的run方法,如果是对象锁,//则各自用自己的,即独享,所以要用静态锁,共享才可以//synchronized(this){synchronized(Ticket3.class){if(num > 0){//有两处代码以上会产生并发操作,会导致数据混乱,必须加锁System.out.println(Thread.currentThread().getName() + "卖出第" + (51-num) + "张票");num--;}else{break;}}}}public static void main(String[] args) {//两线程执行各自的run方法,如果是对象锁,//则各自用自己的,所以要用静态锁,共享才可以new Ticket3().start();new Ticket3().start();}}
0 0
- 卖票系统同步问题
- 卖票小系统(关于线程同步的问题)
- 卖票小系统(关于线程同步的问题)
- java 线程同步--卖票问题
- Java 线程同步 卖票问题
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- 卖票系统
- 卖票系统
- 线程同步问题,线程上锁---多线程“卖票”实例
- 线程同步,卖票
- 同步函数--卖票
- 多线程同步卖票demo
- 用线程同步卖票
- 卖票——多线程模拟卖票系统
- 多线程,卖票系统
- 【线程】卖票系统
- 【线程】卖票系统②
- 【java】卖票系统
- 首次启动优美新手指引tip
- windows和linux下开启mysql日志
- 实现高保真文件复制
- 成熟的男人
- 【nginx】nginx读书笔记
- 卖票系统同步问题
- linux内核中驱动开发常见的类似多态
- 我的十年图像生涯
- 企业级Java开发学习路线(草稿)
- 学会思考技术背后的那些思想和本质
- a sad contest
- Android Bitmap 全面解析(二)加载多张图片的缓存处理
- java基础加强_反射
- 用户 用户组 用户目录 字符集 用户文件夹