黑马程序员技术交流社区
标题:
关于同步代码块
[打印本页]
作者:
Mr.高
时间:
2014-6-23 20:40
标题:
关于同步代码块
class Maipiao implements Runnable
{
private int piao=100;
public /*synchronized*/ void run()
{
Object a=new Object();
while(true)
{
synchronized(a)
{ if(piao>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"piao="+piao--);
}
}
}
}
}
class Demo
{
public static void main(String[] args)
{
Maipiao a=new Maipiao();
Thread b=new Thread (a);
Thread c=new Thread (a);
Thread d=new Thread (a);
Thread e=new Thread (a);
b.start();
c.start();
d.start();
e.start();
System.out.println("Hello World!");
}
}
复制代码
大家看一下,结果运行出来怎么还有0,-1,如果改成同步函数就没有这个问题。大家看一下
作者:
tiuwing
时间:
2014-6-23 20:55
Object a=new Object();
是锁的问题!你在run方法内定义锁,则实际上生成的几个Thread对象内的run方法内的锁都不是同一个,如果要保证同步,锁对象必须是同一个。把 Object a=new Object(); 写到run方法外就可以了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2