A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么synchronized()中的对象不能直接new 对象,如:synchronized(new Object())

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 赞一个!

查看全部评分

5 个回复

倒序浏览
哥们测试过了没?我以前用毕老师讲的那个卖票程序试了下,完全没问题,可以直接new对象啊
  1. class Ticket implements Runnable
  2. {
  3.         private int num = 2000;
  4.         //Object obj = new Object();
  5.         public void run()
  6.         {
  7.                 while (true)
  8.                 {
  9.                         synchronized(new Object())
  10.                         {
  11.                                 show();
  12.                         }
  13.                 }
  14.         }
  15.         public synchronized void show()
  16.         {
  17.                 if (num>0)
  18.                 {
  19.                         try
  20.                         {
  21.                                 Thread.sleep(10);
  22.                         }
  23.                         catch (Exception e){}
  24.                         System.out.println(Thread.currentThread().getName()+"...sale :"+num--);
  25.                 }
  26.         }
  27. }
复制代码

主函数我就不写上了,就是开启线程

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 不错哦,谢谢你的认真。

查看全部评分

回复 使用道具 举报
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张票

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 赞一个!

查看全部评分

回复 使用道具 举报
而且,你那好像最终的锁是this锁吧,不是new Object()的对象锁吧?
回复 使用道具 举报
毕老师的视频讲的很清楚,因为这样会就不会是同一把锁了
回复 使用道具 举报
哦,是不是放到外面就是同一把锁,因为我把Object obj = new Object()放到run()方法外就可以了,看来毕老师的视频后,发现又忘记了锁的问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马