开发者社区> 问答> 正文

JAVA的List怎么实现线程同步啊? 400 报错

JAVA的List怎么实现线程同步啊? 400 报错

我的网站用一个list记录最近用户浏览的信息,只记录最新几十条,频凡的添加移除操作,如果在线用户少就没事,在线用户一多就出错,错误就是list不是线程同步的一个线程在移除时,另一个线程在循环就报错,有什么好办法.

展开
收起
爱吃鱼的程序员 2020-05-30 22:06:21 490 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    Vector 是线程安全的, ArrayList 不是线程安全的

    ######这个也不是完全线程同步的,Vector只在少量的地方对象同步,大部分方法上进行了同步######

    private static ConcurrentHashMap<String, Method> actions = new ConcurrentHashMap<String, Method>();

    synchronized (actions) {

    actions.put(key, m);

    }

    ######

    我用了synchronized 还是报错,只能试下Vector了

    ######

    用 for(Object o:List)不可以吗?

    ######

    CopyOrWriteArrayList 

    java 并发包 提供的 ArrayList 线程安全类

    ######

    好的我看看

    ######

    引用来自#6楼“yifeng”的帖子

    CopyOrWriteArrayList 

    java 并发包 提供的 ArrayList 线程安全类

     在迭代器上进行的元素更改操作(remove、set 和 add)不受支持。这些方法将抛出 UnsupportedOperationException。

    同样不行

    ######

    引用来自#8楼“人人”的帖子

    引用来自#6楼“yifeng”的帖子

    CopyOrWriteArrayList 

    java 并发包 提供的 ArrayList 线程安全类

     在迭代器上进行的元素更改操作(remove、set 和 add)不受支持。这些方法将抛出 UnsupportedOperationException。

    同样不行

    你这个问题要用Iterator

    ######

    用这个 整理一下不行   Collections.synchronizedList(list) ?

    ######

    要是这样的问题我会用 ThreadLocal,试试

    2020-05-30 22:06:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载