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 }
此为本人学习笔记,若有错误,请不吝赐教