Tag: 队列

java中的随机唯一编号

我正在尝试获取一个随机数列表并将其放入队列而不重复随机数。 int number = 40; for (int j = 0; j<number; j++) { int pick = random.nextInt(number); myQueue.add(Integer.toString(pick)); } System.out.println("the queue size: "+myQueue.size()); Iterator it = myQueue.iterator(); while(it.hasNext()){ String iteratorValue = (String)it.next(); System.out.println("queue next value: "+iteratorValue); } 用上面的代码,我得到了一些重复的随机数 有谁知道怎么做?

“无法实例化类型……”

当我尝试运行此代码时: import java.io.*; import java.util.*; public class TwoColor { public static void main(String[] args) { Queue theQueue = new Queue(); } public class Edge { //u and v are the vertices that make up this edge. private int u; private int v; //Constructor method public Edge(int newu, int newv) { u = newu; v = […]

Java线程简单队列

我正在尝试使用Java Thread创建一个简单的队列,允许循环,比如一个10次迭代的for循环,一次迭代n(<10)个线程,并等待这些线程完成后再继续迭代。 这是一个更好的方式来说明我的问题: for (int i = 1; i <= 10; i++) { new Thread ( do_some_work() ); if ( no_available_threads ) { wait_until_available_threads(); } } do_some_work() { // do something that takes a long time } 基本上我想要做的是这个副本: 线程和队列 我怎样才能以最无痛的方式实现这一目标?

Amazon SQS长轮询不返回所有邮件

我需要在1次读取中读取Amazon SQS队列中的所有消息,然后根据创建的时间戳对其进行排序并对其执行业务逻辑。 为了确保检查所有SQS主机的消息,我启用了长轮询。 我这样做的方法是将队列的默认等待时间设置为10秒。 (任何大于0的值都将启用长轮询)。 但是,当我尝试读取队列时,它仍然没有给我所有的消息,我不得不做多次读取以获取所有消息。 我甚至通过每个接收请求的代码启用长轮询,仍然无法正常工作。 以下是我正在使用的代码。 AmazonSQSClient sqsClient = new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider()); sqsClient.setEndpoint(“sqs.us-west-1.amazonaws.com”); String queueUrl = “https://sqs.us-west-1.amazonaws.com/12345/queueName”; ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl).withMaxNumberOfMessages(10).withWaitTimeSeconds(20); List messages = sqsClient.receiveMessage(receiveRequest).getMessages(); 我在队列中有3条消息,每次运行代码时都得到不同的结果,有时候我得到所有3条消息,有时只有1条。可见性超时我设置为2秒,只是为了消除消息变得不可见的原因因为没有在阅读中看到它们。 这是短轮询的预期行为。 长轮询应该可以消除多个民意调查。 我在这里做错了吗? 谢谢

Java中的并发和阻塞队列

我有一个线程将事件推送到第二个线程的传入队列的经典问题。 只有这一次,我对表现很感兴趣。 我想要实现的是: 我希望并发访问队列,生产者推送,接收器弹出。 当队列为空时,我希望使用者阻塞队列,等待生产者。 我的第一个想法是使用LinkedBlockingQueue ,但我很快意识到它不是并发的,性能受到了影响。 另一方面,我现在使用ConcurrentLinkedQueue ,但我仍然在每个发布上支付wait() / notify()的成本。 由于消费者在找到空队列时没有阻塞,因此我必须在锁上进行同步和wait() 。 另一方面,生产者必须获得该锁定并在每个出版物上notify() 。 总体结果是我在每个出版物中支付sycnhronized (lock) {lock.notify()}的成本,即使不需要也是如此。 我想这里需要的是一个阻塞和并发的队列。 我想象一个push()操作在ConcurrentLinkedQueue工作,当push元素是列表中的第一个元素时,对象提供额外的notify() 。 我认为这样的检查已经存在于ConcurrentLinkedQueue ,因为推送需要连接下一个元素。 因此,这比每次在外部锁上同步要快得多。 是这样的/合理的吗?

将Java PriorityQueue转换为稳定的优先级队列

我正在尝试在Java中实现稳定(先进先出)优先级队列。 假设密钥是一个名称,值是一个年龄,我知道我可以像这样建立一个不稳定的优先级队列: Queue<Map.Entry> pq = new PriorityQueue<Map.Entry>(100, ageComparator); 这几乎可以满足我所需要的一切,除了它在我插入(或删除它们)时不保持键值对的顺序。 我通过创建一个LinkedList找到了“解决方法”,它实际上提供了所有相同的function,除了它不包含带比较器选项的构造函数,我觉得它必须更慢,因为我保持值排序通过在每个队列操作后调用Collections.sort() 。 所以我想我真的有两个选项让我感兴趣。首先,我如何编辑上面的PriorityQueue来维护插入和删除顺序? 或者,我怎样才能强制我的LinkedList选项立即使用比较器而不必在每次操作时调用排序? 谢谢! 编辑: 感谢发布的第一条评论中的好问题。 通过FIFO,我的意思是对于具有相等值的键值对,应首先提取首先放入的对。

Java BlockingQueue take()vs poll()

在无限循环中使用队列中的值时 – 更有效: 1)阻止队列,直到通过take()获得值 while (value = queue.take()) { doSomething(value); } 2)睡眠n毫秒并检查物品是否可用 while (true) { if ((value = queue.poll()) != null) { doSomething(value); } Thread.sleep(1000); }

级别顺序遍历java中的通用树(n-ary树)

(如果你想避免冗长的解释,我正在寻找的是java中generics树(n-ary树)的级别顺序遍历。提供的代码工作并需要级别顺序显示function。一小时但无法找到对通用n-ary树的引用。如果soemone可以帮助我在我的代码之上构建LevelOrderDisplay函数,将会很感激,因为它将帮助我理解我得到的队列错误。谢谢!) 我一直在尝试在工作中实现Autosys作业计划的树表示。 由于每个作业(进程)可以有一个或多个依赖作业,我决定使用n-ary树实现,以便我可以映射流。 我正在使用java集合。 我需要执行级别顺序遍历来显示作业依赖性。 首先打印Root,然后是第1级上的所有节点,然后是第2级上的所有节点,依此类推。 我试图在StackOverflow上搜索超过一个小时,但我遇到的大多数例子都是二叉树。 我明白我需要为此使用队列。 根据我在研究过程中得到的结果,该算法应如下所示:如果错误,请纠正我,如果可能,请为此提供代码。 替代方法也是受欢迎的,但我真正想要的是通用树的简单基本级别遍历。 让我们为通用树实现提供一个资源丰富的线程。 大多数代码已经在运行。 请帮忙。 Algo: 对于每个节点,首先访问节点,然后将其子节点放入FIFO队列。 printLevelorder(tree) 1) Create an empty queue q 2) temp_node = root /*start from root*/ 3) Loop while temp_node is not NULL a) print temp_node->data. b) Enqueue temp_node’s children (first left then right children) to q c) Dequeue a node from […]

java.util.ConcurrentLinkedQueue

我想使用java.util.ConcurrentLinkedQueue作为Servlet的非持久队列。 这是来自类的javadoc的模糊。 基于链接节点的无界线程安全队列。 当许multithreading共享对公共集合的访问权限时,ConcurrentLinkedQueue是一个合适的选择。 此队列不允许null元素。 现在假设我在servlet上有1000个并发请求,每个线程都需要将一个对象嵌入到ConcurrentLinkedQueue中。 从描述中,我应该得出结论,处理负载没有问题吗? 我需要的保证是: 我自动收到线程安全保证,而无需自己进行同步。 如果流量负载超过1000并发请求,我将不会丢失任何请求。 谢谢