黑马程序员技术交流社区
标题:
为什么synchronized()中的对象不能直接new 对象
[打印本页]
作者:
QQ被盗
时间:
2013-11-28 12:56
标题:
为什么synchronized()中的对象不能直接new 对象
为什么synchronized()中的对象不能直接new 对象,如:synchronized(new Object())
作者:
陪你等日出
时间:
2013-11-28 13:14
哥们测试过了没?我以前用毕老师讲的那个卖票程序试了下,完全没问题,可以直接new对象啊
class Ticket implements Runnable
{
private int num = 2000;
//Object obj = new Object();
public void run()
{
while (true)
{
synchronized(new Object())
{
show();
}
}
}
public synchronized void show()
{
if (num>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e){}
System.out.println(Thread.currentThread().getName()+"...sale :"+num--);
}
}
}
复制代码
主函数我就不写上了,就是开启线程
作者:
QQ被盗
时间:
2013-11-28 13:37
class MyTicket implements Runnable
{
private int ticket = 100;
public void run(){
Object obj = new Object();
while(true){
synchronized(obj){
if(ticket>0){
try{
Thread.sleep(10);
}catch(Exception e){}
System.out.println(ticket--);
}
}
}
}
}
但是我这段代码会出现第0张票
作者:
QQ被盗
时间:
2013-11-28 13:38
而且,你那好像最终的锁是this锁吧,不是new Object()的对象锁吧?
作者:
狼王
时间:
2013-11-28 19:56
毕老师的视频讲的很清楚,因为这样会就不会是同一把锁了
作者:
QQ被盗
时间:
2013-11-28 21:33
哦,是不是放到外面就是同一把锁,因为我把Object obj = new Object()放到run()方法外就可以了,看来毕老师的视频后,发现又忘记了锁的问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2