多线程卖票问题

简介: 多线程卖票问题

 

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关键字看下执行结果,可以看到是有序的

相关文章
|
Java
线程安全问题-卖票案例实现
线程安全问题-卖票案例实现
93 0
|
安全 Java
java多线程之Lock锁原理以及案例实现电影院卖票
java多线程之Lock锁原理以及案例实现电影院卖票
155 0
|
Java
线程同步经典案例——卖票问题
用上面这种方式创建的所有线程都共享同一份数据,但如果用第一种创建线程的方式,则要将数据用static修饰才能共享
278 0
线程同步经典案例——卖票问题
|
Java
Java代码实现多线程卖票
Java代码实现多线程卖票
193 0
JUC学习(二):Lock的介绍及使用(实现多线程卖票)
JUC学习(二):Lock的介绍及使用(实现多线程卖票)
163 0
JUC学习(一):synchronized的介绍及使用(实现多线程卖票)
JUC学习(一):synchronized的介绍及使用(实现多线程卖票)
180 0
|
安全 Java
【多线程:锁】卖票程序
【多线程:锁】卖票程序
219 0
多线程卖票问题
多线程卖票问题 我们模拟一个多窗口同时卖票的情景。问题的关键在于两个人不能卖出相同编号的一张票。
|
Java
JAVA培训—线程同步--卖票问题
线程同步方法: (1)、同步代码块,格式: synchronized (同步对象){ //同步代码 } (2)、同步方法,格式: 在方法前加synchronized修饰 问题: 多个人同时买票。 1、资源没有同步。
664 0
|
28天前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
116 6

热门文章

最新文章