线程同步——火车票问题
Posted dbbf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程同步——火车票问题相关的知识,希望对你有一定的参考价值。
1、问题
1.1 产生原因
多个线程调用同一个变量的时候,因为一个时间点只有一个线程在跑,就会产生一些线程改变了这个变量,但是其它的线程却还是根据之前的变量在跑
1.2 具体问题
两个卖票的线程,票不为0时进行买票,但是当两个线程都进行买票的方法中时,一个线程已经把票卖完了,但是另一个线程的卖票程序还在跑,所以就开始卖负票了
1.3 解决办法
使用同步代码块
2、代码
1 public class Demo { 2 public static void main(String[] args) { 3 Ticket t = new Ticket(); 4 new Thread() { //线程一 5 6 @Override 7 public void run() { 8 try { 9 this.sleep(10); 10 } catch (InterruptedException e) { 11 // TODO Auto-generated catch block 12 e.printStackTrace(); 13 } 14 t.saleTicket(); 15 } 16 }.start(); 17 18 new Thread() { //线程二 19 20 @Override 21 public void run() { 22 try { 23 this.sleep(100); 24 } catch (InterruptedException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 } 28 t.saleTicket(); 29 } 30 }.start(); 31 32 } 33 } 34 35 class Ticket { 36 private int ticket = 100; 37 public void saleTicket() { 38 while (ticket != 0) { 39 synchronized(Ticket.class) { 40 System.out.println("...这是第" + ticket-- + "号票"); 41 } 42 } 43 } 44 }
以上是关于线程同步——火车票问题的主要内容,如果未能解决你的问题,请参考以下文章