2 mangoer ys mangoer_ys 于 2015.07.17 08:11 提问

java多线程中两个容器之间的同步 5C

写了一个多线程的爬虫(对多线程不熟悉),但是每次队列中都有重复的元素,我把代码逻辑贴上来,大家帮我看一下,谢谢了:

在进程中:

queue = LinkedBlockingQueue

set = ConcurrentSkipListSet

在每个进程中使用了bfs

bfs:

while(!queue.empty()){

s = queue.poll()

//。。。逻辑代码

set.add(s)

//对s所有子状态扩展

for(son : s.sons){

if(!set.contains(son))

queue.offer(son)

}

}

2个回答

CSDNXIAON
CSDNXIAON   2015.07.17 08:14

多线程之间同步
java多线程同步
Java多线程同步
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

oyljerry
oyljerry   Ds   Rxr 2015.07.17 09:19

线程做同步,取出来元素后,要删除队列中的,其它线程才能写入新数据。

mangoer_ys
mangoer_ys 我在queue的poll和offer处都加了synchronized 但是queue中还是有重复的元素
2 年多之前 回复
oyljerry
oyljerry 回复mangoer_ys: 读写同时发生时queue需要加
2 年多之前 回复
mangoer_ys
mangoer_ys poll方法作用就是删除并返回Queue中的头元素,如何做同步?还需要给queue每个操作加锁吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片