天天看點

使用同步方法解決繼承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 }      

此為本人學習筆記,若有錯誤,請不吝賜教