如下代码所示,为什么继承了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张
添加回答
举报
0/150
提交
取消