为什么run方法的同步代码块加this锁不住,但是直接将run方法设定为同步方法可以锁住

2021-02-04 09:21发布

package test; public class Test { public static void main(String[] args) { new Window(窗口1).sta...

package test;

public class Test {
 
 public static void main(String[] args) {
  new Window("窗口1").start();
  new Window("窗口2").start();
  new Window("窗口3").start();
 }
}


class Window extends Thread {
 
 private static int tickets = 100;

 public Window() {
  super();
  // TODO Auto-generated constructor stub
 }

 public Window(String name) {
  super(name);
  // TODO Auto-generated constructor stub
 }

 @Override
 public synchronized void run() {
  while (true) {
    if (tickets == 0) {
     break;
    }
    
    tickets--;
    System.out.println(getName() + "卖出了1张票,还剩" + tickets + "张");
    try {
     Thread.sleep(30);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
 }
 
}