java中如何获取自定义的synchronizedList?

发布于 2024-11-18 21:20:42 字数 473 浏览 2 评论 0原文

我有一个扩展 ArrayList 的自定义列表 MyList,如下所示:

class MyList extends ArrayList<SomeParticularItem>{
   [some methods...]
}

由于我对列表有并发读取和写入,我想同步它:

MyList mylist = (MyList) Collections.synchronizedList(new MyList());

这似乎没问题,.jar 已构建。然后,在运行时,我得到:

java.util.Collections$SynchronizedRandomAccessList cannot be cast to MyList

是否有更好的方法(有没有任何方法)来获取继承自某些 java.util.List 的列表的同步列表?

I have one customized list MyList that extends ArrayList, like this:

class MyList extends ArrayList<SomeParticularItem>{
   [some methods...]
}

Since I have concurrent reads and writes to the list, I want to synchronize it:

MyList mylist = (MyList) Collections.synchronizedList(new MyList());

This seems to be fine, the .jar is build. Then, at runtime, I get:

java.util.Collections$SynchronizedRandomAccessList cannot be cast to MyList

Is there a better way (is there any way at all) to obtain a synchronized list of a list that inherits from some java.util.List?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼痛 2024-11-25 21:20:42

那么为什么不让 MyList 同步,或者简单地使用 List 接口
列表 mylist = Collections.synchronizedList(new MyList());

编辑:
您当然可以让 MyList 扩展 Vector,因为所有 Vectors 方法都已经同步,您可以节省一些工作。

Well why not make MyList synchronized, alternativly simply use the List interface
List mylist = Collections.synchronizedList(new MyList());

Edit:
You could of course let MyList extend Vector, since all of the Vectors methods are already synchronized you save some work.

绅刃 2024-11-25 21:20:42

最简单的方法是扩展 Vector 而不是 ArrayList。如果您想将其保留为 ArrayList,您也可以自己同步 MyList 的方法。

The easiest way to do it would be to extend Vector instead of ArrayList. You could also synchronize the methods of MyList yourself if you wanted to keep it as an ArrayList.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文