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,每次只有一个线程在--;
@Overridepublic void run() {
while(ticket.getTicketNum()>0){
ticket.sellTicket()
System.out.println(Thread.currentThread().getName() + "卖了一张票剩余"+ticket.getTicketNum()+"张票" )
}
}
问题出现在这段代码,虽然ticket.getTicketNum()方法和ticket.sellTicket()方法都是同步方法,但是这两个方法执行间隔可能会有其他线程访问ticket对象,因此这两个同步方法起不到同步作用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)