1 package com.atfu.java01;
2
3 /**
4 * 例子:建立三個視窗賣票,總票數為100張,使用繼承Thread類的方式。
5 *存線上程安全問題,待解決。
6 *
7 *使用同步代碼塊解決繼承Thread類的方式的線程安全問題
8 *
9 * 說明:在使用繼承Thread類建立多線程的方式中,慎用this來充當同步螢幕。考慮使用目前類來充當同步螢幕。
10 *
11 *
12 * @author fu jingchao
13 * @creat 2021/10/17-14:59
14 */
15 class Window2 extends Thread{
16 private static int ticket = 100;
17 private static Object obj = new Object();
18 @Override
19 public void run() {
20
21 while (true) {
22 // synchronized(obj) {
23 synchronized(Window2.class) {//Window2.class也是一個對象,隻會加載一次;Class class = Window.class
24 //synchronized(this)是錯誤的方式:this代表着t1,t2,t3三個對象,鎖不唯一。
25 if (ticket > 0) {
26 try {
27 Thread.sleep(100);
28 } catch (InterruptedException e) {
29 e.printStackTrace();
30 }
31 System.out.println(getName() + ":賣票,票号為:" + ticket);
32 ticket--;
33 } else {
34 break;
35 }
36 }
37 }
38 }
39 }
40
41 public class WindowTest2 {
42 public static void main(String[] args) {
43 Window2 w1 = new Window2();
44 Window2 w2 = new Window2();
45 Window2 w3 = new Window2();
46 w1.setName("視窗一");
47 w2.setName("視窗二");
48 w3.setName("視窗三");
49 w1.start();
50 w2.start();
51 w3.start();
52 }
53 }
此為本人學習筆記,若有錯誤,請不吝賜教