实现Java中的线程安全的ArrayList我想写它支持一个简单的线程安全的ArrayList:通过锁定
的add(),删除(int i)以插入(int i)以,更新(INT I )和get(int i)
一个简单的实现是向内部数据结构(例如对象数组)添加锁,但它不够好,因为一次只能有一个线程访问列表。
因此,我最初的计划是为每个数据槽添加锁,以便不同的线程可以同时访问不同索引中的元素。数据结构如下所示:
class MyArrayList {
Lock listlock;
Lock[] locks;
Object[] array;
}
锁定应该工作如下如果没有必要做调整():
- 对于GET(int i)以,一个线程需要获取锁[i]中。
- 对于insert(int i),线程需要获取所有的锁[j](对于j> = i)和listlock。
- 对于remove(int i),线程需要获取j> = i和listlock的所有锁[j]。
- 对于add(),线程需要获取listlock。
- 对于insert(),线程需要获取锁[i]。
我的问题是:
- 如何调整,而更多的对象添加和我需要建立一个新的更大的阵列来存储所有对象时处理的锁。这很烦人,因为一些其他线程也可能会等待锁被释放,
- 任何更好的建议来实现这样的线程安全的数组列表?
'List list = Collections.synchronizedList(new ArrayList());'? –
存在,它被称为矢量。 – DwB
我认为这是一个练习,并不是一件容易的事,因为JDK中有内置的并发集合。 – biziclop