问题描述
在多线程编程中,有一个队列(用linkedList实现),里面会有大量数据,先需要多线程进行快速访问,该怎么实现?如列表{'a','b','c','d','e','f'}中,对每个元素都加上字符串‘q’,该怎么实现多线程顺序化访问并添加字符串?求实例简单代码
解决方案
你要是做作业帮不了你,要是项目实际想解决问题就这么做:ConcurrentLinkedDeque q = new ConcurrentLinkedDeque(你的LinkedList)然后这个q就随便多线程玩了。线程安全的。这个API需要Java7如果你不用Java7,换成ConcurrentLinkedQueue 也差不多。这个需要Java5你要是Java5都不用的话就自己同步了。
解决方案二:
你可以在所有的线程访问你的list之前让他们去竞争获取一个锁对象,谁拿了锁,谁才可以操作,这样的锁对象很多,你再Juc框架里面就能找到!
解决方案三:
感觉你的意思是多线程且分布式的处理这个队列呢,就是a线程处理一部分b线程处理另一部分。 而不是仅仅考虑线程安全问题呢。
解决方案四:
ConcurrentLinkedDeque 有一个改进就是使用了乐观锁.也就是只有真正发生冲突的时候,才需要想办法解决,而不是事先就锁住.这样自然就提高了并发度.至于怎么解决冲突,简单的说,就是发现冲突之后,重新把想做的事情在做一遍,不会每次做什么都和别的线程冲突吧,总有成功的时候.至于怎么检测冲突,简单点说,就是需要硬件(CPU)支持,详细情况可以参考下面的博文,不过是针对ConcurrentHashmap的.http://flyfoxs.iteye.com/admin/blogs/2100120
解决方案五:
1.5之后加入的那些ConcurrentXXXXX集合为什么说是线程安全的一直没怎么搞清楚,2个线程同时操作不用加锁也能保证数据正确?我觉得还是要在处理此集合的对方加入集合对象锁。不然还是不能保证数据完整性