关于synchronized参数问题

咖啡猫yyddbull 2012-12-26 05:03:59
请问各位大虾,synchronized (this)两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。

那么synchronized ("A"),synchronized ("dhdhfh")表示什么意思呢?参数一个字符串
...全文
288 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
安特矮油 2012-12-27
  • 打赏
  • 举报
回复
synchronized ("A"),synchronized ("dhdhfh")这个只是以一个字符串常量作为lock而已,保证只能有一个线程执行该方法。因为字符串常量在系统中只有一份
yongger520 2012-12-27
  • 打赏
  • 举报
回复
synchronized ("A"),synchronized ("dhdhfh") 其实没啥意思
jerry605 2012-12-27
  • 打赏
  • 举报
回复
我觉得你要弄清楚synchronized的本质。 在java中,每个对象都持有一把对象锁,这是在java语言层实现的机制(有别于JAVA 5 中的lock),因此不需要显式释放锁。synchronized 是线程级的,并不是方法级的,因此如果两个方法都对同一个对象加了synchronized方法,并且在一个方法A中调用了另外一个方法B,如果线程调用方法A,也不会在A调用B时需要等待锁释放,因为此时线程已经获得锁了。 回到你的问题,synchronized(this), 表示线程锁加在被调用对象本身上,因此,同一时刻,该对象只能有一个synchronized方法会被一个线程调用,其它线程调用的synchronized方法都会阻塞以等待锁的释放 synchronized(this) 适用于方法彼此间都会修改对象的某个状态,如果在某个对象的两个synchronized彼此不会共享任何资源,比如A中修改资源r1,B中修改资源r2,则在A和B中同时加上synchronized(this)会引起不必要的性能开销,因为调用A和B的线程不必要同步,此时简单的办法就是通过为A和B加不同的锁: Object lock1 = new Object(); Object lock2 = new Object(); public void A(){ synchronized(lock1){ } } public void B(){ synchronized(lock2){ } } 这样,调用A和B的线程之间不会同步,只有都调用A或者都调用B的线程间需要同步。 希望对你有帮助
guangtime 2012-12-26
  • 打赏
  • 举报
回复
表示没意思……

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧