本帖最后由 张向辉 于 2012-12-4 17:33 编辑
class lockdemo
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
locktick t= new locktick();
Thread t1= new Thread(t);
Thread t2= new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
t.flag=false;
t2.start();
}
}
class locktick implements Runnable
{
private int tick=100;
Object obj =new Object();
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(obj)
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"......"+tick--);
}
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"......"+tick--);
}
}
}
show()方法锁和Synchronized代码块的锁不一样的情况下 可能出现错误票0 老师演示了 但我自己练习时发觉即使Synchronized代码块内的对象改上this 后,0错误票没有了,但是会有重复的 怎么回事啊? |