黑马程序员技术交流社区
标题:
synchronized可以用在run()方法里面么,代码如下
[打印本页]
作者:
何超
时间:
2013-11-8 18:17
标题:
synchronized可以用在run()方法里面么,代码如下
本帖最后由 何超 于 2013-11-8 22:03 编辑
class Ticket implements Runnable
{
private tick=10;
public void run()
{
while(true)
{
if(tick>0)
{ System.out.println("Thread.currentThread().getName()"+tick);}
}
}
}
class TicketDemo2
{
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();
}
}
复制代码
现在要对线程进行同步,毕老师的方法是把while中的语句提出来重新建立一个方法实现 然后对那个方法进行同步
可是为什么不直接在 while语句里面对同步代码块进行同步呢
Objcet obj=new Object();
while(true)
{
synchronized(obj)
{
if(tick>0)
{ System.out.println("Thread.currentThread().getName()"+tick);}
}
}
复制代码
作者:
寻丶丶觅
时间:
2013-11-8 18:41
本帖最后由 寻丶丶觅 于 2013-11-8 18:43 编辑
表示没懂 老毕也是在run方法中同步,不过如果你锁用Object对象的话 不要写在方法区中,这样是每个线程进来各拿一把锁
作者:
只想要一盏灯
时间:
2013-11-8 19:05
童鞋,这个while(true)表示无限循环,不加也可以的,加了能让你更加直观的看出结果
你也可以直接在那个代码里面加同步啊,提取出来是优化后的结果,我记得专门有个视频是在将优化的
作者:
hel
时间:
2013-11-8 19:59
synchronized(obj)
{
show();
}
show()
{
system.out.println("123")
}
和
synchronized(obj)
{
system.out.println("123")
}
是一样的结果,只不过是写法不同
作者:
明月几时有
时间:
2013-11-9 11:19
是一样的,那是对代码的优化
作者:
ixiangfeng
时间:
2013-11-9 11:45
呃 老毕视频里两种都有说吧 而且是先说在run方法里面写同步代码块的 然后用同步函数来验证锁是this 刚才刚看到这里 这两种情况都是一样的 没区别
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2