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; } } } }}