通过锁定在Java中实现线程安全的ArrayList
我想写一个简单的线程安全arraylist,它支持:
add(),remove(int i),insert(int i),update(int i)和get(int i) 一个简单的实现是向内部数据结构(例如对象数组)添加锁定,但它不够好,因为一次只有一个线程可以访问列表. 因此,我的初步计划是为每个数据槽添加锁定,以便不同的线程可以同时访问不同索引中的元素.数据结构如下所示: class MyArrayList { Lock listlock; Lock[] locks; Object[] array; } 如果不需要调整resize(),锁定应该如下工作: >对于get(int i),线程需要获取锁[i]. 我的问题是: >在更多对象添加时调整大小时如何处理锁定,我需要创建一个新的更大的数组来保存所有对象.这很烦人,因为其他一些线程也可能会等待释放锁, 解决方法
一个简单的方法就是使用
read-write lock([Reentrant] ReadWriteLock),这么多线程可以同时读取,但是一旦有人获得写锁定,其他人就无法访问该列表.
或者你可以做一些与你的想法有些类似的事情:每个插槽的一个读写锁定全局(“结构”)读写锁定变量以跟踪j> = i情况.所以: >要访问(读取或写入)任何内容,线程至少需要全局读锁定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |