And*_*rey 2 java concurrency multithreading
我正面临这个问题:我有很多线程(1024)访问一个大型集合 - Vector.问题:是否有可能对它做一些事情,这将允许我对它进行并发操作而不必同步所有事情(因为这需要时间)?我的意思是,就像Mysql数据库一样,你不必担心同步和线程安全问题.在Java中有一些类似的集合吗?谢谢
Vector是一个非常古老的Java类 - 早于Collections API.它在每次操作时都会同步,所以你不会有任何运气试图加速它.您应该考虑重新编写代码以使用ConcurrentHashMap或LinkedBlockingQueue,这些内容针对并发访问进行了高度优化.
如果做不到这一点,你提到你喜欢与数据库类似的性能和访问语义 - 为什么不使用专用数据库或消息队列?他们可能会比你以前更好地实现它,并且你编写的代码更少!
[编辑]鉴于你的评论:
all what thread does is adding elements to vector
(only if num of elements in vector = 0) &
removing elements from vector. (if vector size > 0)
Run Code Online (Sandbox Code Playgroud)
听起来非常像你应该使用的东西更像是队列而不是列表!大小为1的有界队列将为您提供这些语义 - 虽然我会质疑为什么如果已经存在某些内容则无法添加元素.当你有成千上万的线程时,这似乎是一个非常低效的设计.
首先,这个设计听起来不对.听起来你需要考虑使用适当的数据库而不是简单的数据结构,即使这意味着只使用类似于HypersonicDB的内存实例.
但是,如果您坚持以这种方式执行操作,那么java.util.concurrent包具有许多高度并发的非锁定数据结构.其中一个可能适合您的目的(例如ConcurrentHashMap,如果你可以使用a Map而不是a List)
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |