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中还是有重复的元素
大约 3 年之前 回复
oyljerry
oyljerry 回复mangoer_ys: 读写同时发生时queue需要加
大约 3 年之前 回复
mangoer_ys
mangoer_ys poll方法作用就是删除并返回Queue中的头元素,如何做同步?还需要给queue每个操作加锁吗?
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java 多个线程之间同步通信
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Lock 类似 synchronize (让多个线程 执行任务的时候 相互不干扰,不被打断 :互斥
Java同步和线程交互的理解
Java的线程设计比较简单,可是从操作系统层面的API来理解是,会存在问题。Java提供的线程设计和Unix/Linux系统的API设计思路稍有不同,在理解上也会存在问题。笔者使用Java多年,经常使用Java的多线程,确发现在编写一个测试用例时发现自己并没有深入理解Java的线程机制。本文通过简明扼要的方式简要说明并尝试用图的方式理解Java的多线程机制。 请看图: 简单看图中文章,应该可
Java多线程(四)- 协调同步线程
当一个线程使用的同步方法中用到的某个变量,而此变量又需要其他线程修改才能符合本线程的需要,那么可以再同步方法中使用wait()方法。 使用wait()方法时正确的模板是将锁放置在while()循环中。
Java进程-同步与异步
java synchronized详解Java中Synchronized的用法知识点1、Synchronized同步静态方法和非静态方法总结1、synchronized修饰代码块1、两个并发的线程访问同一个对象中的synchronized(this)同步代码块时,同一时间内只有一个线程执行,另外一个线程需要等到当前线程结束之后才能执行。package MapTest; public class ...
同步容器(如Vector)并不是所有操作都线程安全!
这里是网友们的回答 @赵鹏: size方法和get方法,如果集合的长度变化了,可能抛出异常, @aold619: 去网上查了资料:“有条件的线程安全 我们在 7 月份的文件“ 并发集合类”中讨论了有条件的线程安全。有条件的线程安全类对于单独的操作可以是线程安全的,但是某些操作序列可能需要外部同步。条件线程安全的最常见的例子是遍历由 Hash
JAVA 并发编程-多个线程之间共享数据(六)
多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计4个线程。,其中两个线程每次对j增加1,另外两个线程对j每次减1,银行存取款 有两种方法来解决此类问题:将共享数据封装成另外一个对象,然后将这个对象逐一传递
JAVA多线程机制之同步与互斥
一个多线程的程序,两个或者多个线程可能需要访问同一个数据资源。这时就必须考虑数据安全的问题,需要线程互斥或者同步。线程的互斥当多个线程需要访问同一资源时,要求在一个时间段内只能允许一个线程来操作共享资源,操作完毕后别的线程才能读取该资源,这叫线程的互斥。我们需要使用synchronized来给共享区域加锁,确保共享资源安全。 如果一个线程调用了某个对象的synchronized方法,它在这个方法运
多线程同步互斥实例——使用synchronized实现线程通信和互斥
线程互斥概念       线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 实现线程同步互斥的四种方式       临界区(Critical Section):适合一个进程内的多线程访问公共区域或代码段时使用       互斥量 (Mutex):适合不同进程内多线程访问公共区域或代码段时使用
【多线程高并发】 同步容器和队列
关键字: 同步容器,队列,ConcurrentMap, Copy-On-Write容器,并发Queue, ConcurrentLinkedQueue, BlockQueue接口, ArrayBlockingQueue , LinkedBlockingQueue, PriorityBlockingQueue, DelayQueue, SynchronousQueue github地址: htt
java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
多线程系列教程:java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)java&android线程池-Executor框架之ThreadPoolExcutor&ScheduledThre...