使用同步方法解决继承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 }
此为本人学习笔记,若有错误,请不吝赐教