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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李平 初级黑马   /  2012-4-18 21:46  /  2021 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

同步代码块:
    synchonized(对象)
    {
          需要被同步的代码块;
    }
那个对象的位置应该放什么??
老师用的是Object obj = new Object();的obj。为什么用这个就行?
但是以后所有的都有用这个吗,还是有其他的??

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
可以是任何对象,只要保证在你需要同步的地方使用的是同一个对象。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
锁不一定要放Object对象 所有的对象都可以放   如this   你也可以专门创建一个对象来当锁用 它只是利用对象的状态 跟对象本身没关系。需要注意下同步嵌套的死锁问题。。
回复 使用道具 举报
所有的对象都可以放.
回复 使用道具 举报
关键字小写 不是synchonized而是 synchronized
synchronized(this){}(非静态方法中)  当地1个线程(线程1)执行到这句话时检测this的同步锁状态 这是为没锁 可以继续往下执行 当执行完这句话时 this的状态为已锁 如果这是切换到别的线程时当执行到这句话检测this的状态发现已锁卡在这将切换线程 当线程1执行完同步代码块时锁状态为开 其他的线程才可以进入同步代码块中 并且锁状态为已锁
当嵌套同步代码块时  不能用同把锁否则死锁 如
synchronized(this){
        synchronized(this){
}
}
当地1个线程即线程1执行完地1行代码时 this状态将为已锁 执行到地2行时  判断this状态 发现已锁将卡在这里 其他线程也将卡在第一行
synchronized(this){
}
synchronized(this){
}

可以用2把不同的锁解决该问题

synchronized(this){
        String s=new String();
        synchronized(s){
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马