Java中卖票问题

Java中卖票问题,第1张

Thread-0线程正在卖第100张票

Thread-1线程正在卖第100张票

Thread-1线程正在卖第98张票

Thread-1线程正在卖第97张票

Thread-1线程正在卖第96张票

Thread-1线程正在卖第95张票

Thread-1线程正在卖第94张票

Thread-1线程正在卖第93张票

Thread-0线程正在卖第99张票

看清楚就知道:首先:0和1都拿到了第100张,0打印出来了,--了,然后0就拿了第99张,之后0就挂起了,然后1打印出来了,--了,然后1就拿了第98张,到后面0就把上次拿到的99打印出来

你new出来的两个线程都有独立的内存空间,你那个静态的tickets变量,每个线程用都会先从A类那个内存空间那里拿过来放到各自的空间里。

如果加上一个锁块就不同了,它保证每次只有一个线程在拿tickets,每次只有一个线程在--;

@Override

public void run() {

while(ticket.getTicketNum()>0){

ticket.sellTicket()

System.out.println(Thread.currentThread().getName() + "卖了一张票剩余"+ticket.getTicketNum()+"张票" )

}

}

问题出现在这段代码,虽然ticket.getTicketNum()方法和ticket.sellTicket()方法都是同步方法,但是这两个方法执行间隔可能会有其他线程访问ticket对象,因此这两个同步方法起不到同步作用


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11526383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存