为了账号安全,请及时绑定邮箱和手机立即绑定

synchronizedList 多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?

synchronizedList 多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?

莫回无 2019-05-23 19:59:21
synchronizedList多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?搞成CopyOnwriteArrayList性能太差了synchronizedList里的上锁对象是mutex,如下:staticclassSynchronizedCollectionimplementsCollection,Serializable{。。。finalObjectmutex;//Objectonwhichtosynchronize。。。}如果对synchronizedList对象上锁,和在mutex上上锁的add()不会互斥啊这种情况是不是用Vector比较好?Vector的add()等方法是直接对其对象上锁的
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

没用过这个,不过看源码,synchronizedList默认的上锁对象就是当前定义的对象:
finalObjectmutex;//Objectonwhichtosynchronize
SynchronizedCollection(Collectionc){
this.c=Objects.requireNonNull(c);
mutex=this;
}
所以正常来说都是线程安全的,不清楚题主具体什么场景会出现异常,或者尝试自定义上锁对象呢,ListsyncList=Collections.synchronizedCollection(list,mutex),源码构造方法:
SynchronizedCollection(Collectionc,Objectmutex){
this.c=Objects.requireNonNull(c);
this.mutex=Objects.requireNonNull(mutex);
}
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 527 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信