如下代码所示,为什么继承了Thread的线程使用同步方法的时候无法锁住呢?而使用同步代码块就没有问题
package leetcode; import javax.swing.plaf.synth.SynthSeparatorUI; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class mainEntry { public static void main(String[] agrs) { // 创建 3 个窗口 TicketSell t1 = new TicketSell("A窗口"); TicketSell t2 = new TicketSell("B窗口"); TicketSell t3 = new TicketSell("C窗口"); // 启动 3 个窗口进行买票 t1.start(); t2.start(); t3.start(); } } class TicketSell extends Thread { private static int num = 50; public TicketSell(String name) { super(name); } @Override public void run() { for(int i = 0;i<50;i++) sell(); } public synchronized void sell() { if (num > 0) { try { // 模拟卖一次票所需时间 Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(this.currentThread().getName() + "卖出一张票,剩余" + (--num) + "张"); } } }
这是输出
....
A窗口卖出一张票,剩余2张
C窗口卖出一张票,剩余1张
B窗口卖出一张票,剩余0张
A窗口卖出一张票,剩余-1张
拉莫斯之舞
qq_笑_17
相关分类