并发容器(如Vector)同步的实现是对象锁吗?

软院大奇葩 2017-07-28 02:47:48
如果是,那为什么可以说:“多个线程同时访问同一Vector对象的不同的同步方法”?

还有对于普通的、已经实现了同步的类来说,同步锁是加在对象上的(即锁住对象),那么不同的线程就不能同时访问一个对象的同一同步方法,那能不能同时访问同一对象的不同的同步方法呢?

麻烦给指点下,谢谢~
...全文
314 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxigiant 2017-07-28
  • 打赏
  • 举报
回复
compareAndset(CAS问题),说成getAndSet了
软院大奇葩 2017-07-28
  • 打赏
  • 举报
回复
明白了,谢谢楼上的各位~
liuxigiant 2017-07-28
  • 打赏
  • 举报
回复
其实就是典型的getAndSet问题,参考下AtomicInteger.getAndSet
liuxigiant 2017-07-28
  • 打赏
  • 举报
回复
你看看代码再理解,getLast和deleteLast并不是Vector的方法,这两个方法是没有做整体同步的,虽然调用的Vector的方法有synchronized同步,但是被调用的Vector的四个方法交替执行(也就是图中的执行顺序)就会报错
soton_dolphin 2017-07-28
  • 打赏
  • 举报
回复
引用 楼主 sinat_27389893 的回复:
如果是,那为什么可以说:“多个线程同时访问同一Vector对象的不同的同步方法”? 还有对于普通的、已经实现了同步的类来说,同步锁是加在对象上的(即锁住对象),那么不同的线程就不能同时访问一个对象的同一同步方法,那能不能同时访问同一对象的不同的同步方法呢? 麻烦给指点下,谢谢~
可以同时访问同一对象的不同的同步方法, 因为不需要获得对象锁。
李德胜1995 2017-07-28
  • 打赏
  • 举报
回复
Vector是使用synchronized修饰方法的,也就是对象锁。。。所以不能同时访问同一对象的不同的同步方法。。。自己写个简单的例子就可以验证了。。。

62,616

社区成员

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

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