码迷,mamicode.com
首页 > 编程语言 > 详细

线程同步——火车票问题

时间:2018-06-12 22:35:19      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:vat   解决   sync   AC   rri   stat   interrupt   方法   rate   

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 }

 

线程同步——火车票问题

标签:vat   解决   sync   AC   rri   stat   interrupt   方法   rate   

原文地址:https://www.cnblogs.com/Dbbf/p/9175144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!