java笔记线程两种方式模拟电影院卖票

 1 public class SellTicketDemo {
 2     public static void main(String[] args) {
 3         // 创建三个线程对象
 4         SellTicket st1 = new SellTicket();
 5         SellTicket st2 = new SellTicket();
 6         SellTicket st3 = new SellTicket();
 7 
 8         // 给线程对象起名字
 9         st1.setName("窗口1");
10         st2.setName("窗口2");
11         st3.setName("窗口3");
12 
13         // 启动线程
14         st1.start();
15         st2.start();
16         st3.start();
17     }
18 }
19 public class SellTicket extends Thread {
20 
21     // 定义100张票
22     // private int tickets = 100;
23     // 为了让多个线程对象共享这100张票,我们其实应该用静态修饰
24     private static int tickets = 100;
25 
26     @Override
27     public void run() {
28         // 定义100张票
29         // 每个线程进来都会走这里,这样的话,每个线程对象相当于买的是自己的那100张票,这不合理,所以应该定义到外面
30         // int tickets = 100;
31 
32         // 是为了模拟一直有票
33         while (true) {
34             if (tickets > 0) {
35                 System.out.println(getName() + "正在出售第" + (tickets--) + "张票");
36             }
37         }
38     }
39 }
 1 public class SellTicketDemo {
 2     public static void main(String[] args) {
 3         // 创建资源对象
 4         SellTicket st = new SellTicket();
 5 
 6         // 创建三个线程对象
 7         Thread t1 = new Thread(st, "窗口1");
 8         Thread t2 = new Thread(st, "窗口2");
 9         Thread t3 = new Thread(st, "窗口3");
10 
11         // 启动线程
12         t1.start();
13         t2.start();
14         t3.start();
15     }
16 }
17 public class SellTicket implements Runnable {
18     // 定义100张票
19     private int tickets = 100;
20 
21     @Override
22     public void run() {
23         while (true) {
24             if (tickets > 0) {
25                 System.out.println(Thread.currentThread().getName() + "正在出售第"
26                         + (tickets--) + "张票");
27             }
28         }
29     }
30 }


这样的两种方式运行结果都会有问题 负数的票。。。。->>>>

原文地址:https://www.cnblogs.com/lanjianhappy/p/6384018.html