黑马程序员技术交流社区
标题:
这个锁为什么要加载run方法内加方法上不行吗,这样节省...
[打印本页]
作者:
靓仔
时间:
2014-2-19 22:34
标题:
这个锁为什么要加载run方法内加方法上不行吗,这样节省...
本帖最后由 靓仔 于 2014-2-20 08:11 编辑
class Ticket implements Runnable
{
private int ticket = 100;
Object obj=new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(ticket>0)
{
try{Thread.sleep(100);}catch (Exception e){}
System.out.println(Thread.currentThread().getName()+"sale ticket"+ticket--);
}
}
}
}
}
class ThreadSafe
{
public static void main(String[] args)
{
Ticket t =new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
作者:
一年_Hei
时间:
2014-2-19 22:42
run方法还没试过,我感觉应该不可以。因为run方法是父类或接口的。这里是实现run方法。如果在方法上加了synchronized就不知道是不是重写run方法了。不知道我说的对不对。楼主可以自己试下
作者:
北冥有鱼
时间:
2014-2-19 23:38
我测试了一下,个人意见是这样的:将synchronized 写到run方法上会导致run方法被锁定。故只有线程thread-0一直去执行循环。也就是说其他的及格线程无法开启。
作者:
松涛小玮
时间:
2014-2-19 23:43
将run方法同步之后,就接近于单线程了,其它线程是执行不到,必须等当前线程结束完,其它线程才执行。这样执行效率低下。同步是尽量只对共同资源来同步,来提高效率。个人理解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2