多线程卖票问题

简介: 多线程卖票问题

 

public class Ticket {
    private int number =30;
    public  void sale(){
        if(number > 0){
            System.out.println(Thread.currentThread().getName() + "卖出了" +(number--) + "票,剩余:" + number);
        }
    }
 
    public static void main(String[] args) {
        Ticket ticket =  new Ticket();
        new Thread(()->{
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        },"A").start();
 
        new Thread(()->{
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        },"B").start();
 
        new Thread(()->{
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        },"C").start();
    }
}

执行结果:

可以看出多线程情况下,数据是不正确的

 

 

 

传统做法

加上synchronized关键字

加上synchronized关键字看下执行结果,可以看到是有序的

相关文章
|
3月前
|
Java
线程安全问题-卖票案例实现
线程安全问题-卖票案例实现
26 0
|
3月前
|
安全 Java
java多线程之Lock锁原理以及案例实现电影院卖票
java多线程之Lock锁原理以及案例实现电影院卖票
|
Java
Java代码实现多线程卖票
Java代码实现多线程卖票
71 0
|
Java
线程同步经典案例——卖票问题
用上面这种方式创建的所有线程都共享同一份数据,但如果用第一种创建线程的方式,则要将数据用static修饰才能共享
121 0
线程同步经典案例——卖票问题
JUC学习(二):Lock的介绍及使用(实现多线程卖票)
JUC学习(二):Lock的介绍及使用(实现多线程卖票)
102 0
JUC学习(一):synchronized的介绍及使用(实现多线程卖票)
JUC学习(一):synchronized的介绍及使用(实现多线程卖票)
|
安全 Java
【多线程:锁】卖票程序
【多线程:锁】卖票程序
115 0
多线程卖票问题
多线程卖票问题 我们模拟一个多窗口同时卖票的情景。问题的关键在于两个人不能卖出相同编号的一张票。
|
Java
JAVA培训—线程同步--卖票问题
线程同步方法: (1)、同步代码块,格式: synchronized (同步对象){ //同步代码 } (2)、同步方法,格式: 在方法前加synchronized修饰 问题: 多个人同时买票。 1、资源没有同步。
619 0
|
1天前
|
Java
多线程线程同步
多线程的锁有几种方式