两个线程操作一个资源,要想无错误出现,必须使用同一把锁,你用了两个,一个当前对象this,一个是obj!!所以设置obj锁时候出现错误!而且这个代码不好验证同步函数锁是this,用这个:
class Ticket implements Runnable
{
private int ticket = 100;
Object obj = new Object();
boolean flag = true;
public void run()
{
while(true)
{
show();
}
}
public synchronized void show()
{
if(ticket>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println((Thread.currentThread()==this)+"构造函数卖票"+ticket--);
}
}
}
class ThisLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
t1.start();
}
}
当打印出“true同步函数售票,ticket--”时就证明了同步函数锁是this
|