Java 多线程------解决 实现继承 Thread类 方式线程的线程安全问题 方式一:同步代码块
1 package bytezero.threadsynchronization; 2 3 4 5 /** 6 * 使用同步代块的方式 解决继承 Thread类的方式的线程安全问题 7 * 8 * 创建 三个窗口 买票 总票数为 100张 使用继承Thread类的方式 9 * 10 * 说明:在继承Thread类创建多线程的方式中,慎用 this 充当同步监视器,考虑使用 11 * 当前类充当同步监视器 12 * 13 * @author Bytezero1·zhenglei! Email:420498246@qq.com 14 * create 2021-10-15 16:59 15 */ 16 class Window extends Thread{ 17 18 private static int ticket = 100; 19 private static Object obj = new Object(); 20 21 @Override 22 public void run() { 23 while (true){ 24 //正确的 25 //方式一 synchronized (obj) 26 27 //方式二 类也是对象 28 synchronized (Window.class){ 29 30 //错误的方式:此时的this 代表 w1 w2 w3 31 //synchronized (this){ 32 if (ticket > 0) { 33 34 try { 35 Thread.sleep(100); 36 } catch (InterruptedException e) { 37 e.printStackTrace(); 38 } 39 System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket); 40 ticket--; 41 } else { 42 break; 43 } 44 } 45 } 46 } 47 } 48 49 50 public class WindowTest { 51 public static void main(String[] args) { 52 Window w1 = new Window(); 53 Window w2 = new Window(); 54 Window w3 = new Window(); 55 56 w1.setName("窗口1"); 57 w2.setName("窗口2"); 58 w3.setName("窗口3"); 59 60 w1.start(); 61 w2.start(); 62 w3.start(); 63 64 } 65 66 }
...............
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15417260.html