我用并发散列表来创建一个矩阵。它的指数范围为100k。我创建了40个线程。每个线程访问矩阵和修改的该和这些元素写回矩阵为:并发HashMap迭代器:线程的安全性如何?
ConcurrentHashMap<Integer, ArrayList<Double>> matrix =
new ConcurrentHashMap<Integer, ArrayList<Double>>(25);
for (Entry(Integer,ArrayList<Double>)) entry: matrix.entrySet())
upDateEntriesOfValue(entry.getValue());
我没有发现它线程安全的。值经常返回为空,我的程序崩溃。是否有任何其他方式使它线程安全。或者这是线程安全的,我有一些其他地方的错误。有一件事是我的程序不会在单线程模式下崩溃。
你是否建议我使用synchronized Arrayist? – thetna 2012-08-03 07:49:30
同步arraylist将工作,因为它一次只能由一个线程访问。但是,根据添加和读取元素的方式,如果您事先知道大小并希望访问特定索引,则可能需要尝试“LinkedBlockingQueue”或甚至一个java.util.concurrent.atomic数组。它主要取决于你的需求。 – 2012-08-03 08:04:52
您是否尝试使用同步数组列表开始?它解决了你的问题吗? – 2012-08-05 11:01:58