使用同步方法解决继承Thread类的方式的线程安全问题

 1 package com.atfu.java01;
 2 
 3 /**
 4  * 例子:创建三个窗口卖票,总票数为100张,使用继承Thread类的方式。
 5  *
 6  *使用同步方法解决继承Thread类的方式的线程安全问题
 7  *
 8  * 关于同步方法的总结:
 9  * 1.同步方法任然涉及到同步监视器,只是不需要我们显示的声明。
10  * 2.非静态的同步方法,同步监视器:this
11  * 3.静态的同步方法,同步监视器:当前类本身
12  *
13  *
14  *
15  * @author fu jingchao
16  * @creat 2021/10/17-14:59
17  */
18 class Window4 extends Thread{
19     private static int ticket = 100;
20     private static Object obj = new Object();
21     @Override
22     public void run() {
23         while (true) {
24                 show();
25         }
26     }
27     private static synchronized void show(){//同步监视器:Window4.class
28         //private synchronized void show(){//同步监视器:t1,t2,t3,此种解决方式是错误的
29         if (ticket > 0) {
30             try {
31                 Thread.sleep(100);
32             } catch (InterruptedException e) {
33                 e.printStackTrace();
34             }
35             System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);
36             ticket--;
37         }
38     }
39 }
40 
41 public class WindowTest4 {
42     public static void main(String[] args) {
43         Window4 w1 = new Window4();
44         Window4 w2 = new Window4();
45         Window4 w3 = new Window4();
46 
47         w1.setName("窗口一");
48         w2.setName("窗口二");
49         w3.setName("窗口三");
50 
51         w1.start();
52         w2.start();
53         w3.start();
54     }
55 }

 

posted @ 2021-10-18 22:41  橘猫的夏天  阅读(74)  评论(0编辑  收藏  举报