package com.atguigu.java;/** * 使用同步代码块解决线程安全问题 * * 例子:创建三个窗口卖票,总共100张,使用继承Thread类的方式 * *说明:在继承Thread类创建多线程的方式中,慎用this充当同步监视器, *      考虑使用当前类充当同步监视器 * * @author Dxkstart * @create 2021-05-06 21:24 */public class WindowTest3 {    public static void main(String[] args) {        Window w1 = new Window();        Window w2 = new Window();        Window w3 = new Window();        w1.start();        w2.start();        w3.start();    }}class Window extends Thread {    private static int ticket = 100;//票数    static Object obj = new Object();//锁,要加static才能是唯一的锁    @Override    public void run() {        while(true) {            synchronized (Window.class){//            synchronized(obj) {                //错误的方式:此时的this代表t1,t2,t3三个对象//            synchronized(this) {                if (ticket > 0) {                    try {                        Thread.sleep(50);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(getName() + ": 卖票,票号为" + ticket);                    ticket--;                } else {                    break;                }            }        }    }}