Tag: 队列

JMS QueueSender线程安全吗?

我想在multithreading环境中使用QueueSender。 QueueSender.send()线程安全吗?

需要一个可以支持多个读者的队列

我需要一个可以由多个读者处理的队列。 读者将一个元素出列并将其发送到REST服务。 重要的是要注意: 每个读者都应该出列不同的元素。 如果队列具有元素A,B和C,则线程1应该出列A并且线程2应该以并发方式出列B. 等等,直到队列中没有任何内容。 我知道总是在繁忙的循环中运行,窥视项目的队列是CPU密集型的。 所以我不确定阻塞队列是不是一个好选择。 我有什么选择?

Java线程等待并通知

我有两个主题。 线程A从队列中提取一些元素,线程B将一些元素添加到队列中。 我希望线程A在队列为空时进入hibernate状态。 当线程B向队列添加一些元素时,应该确保线程A正在工作。 如何在Java中完成?

在多个服务器上分发java线程?

我是java的新手,非常喜欢学习它。 我已经制作了一个运行良好的程序,但是当我添加更多数据进行处理时需要一些时间。 我做了它的线程,它真的加速了很多,但现在我正在考虑加快速度(显然它需要处理的数据越多,所需的时间越长)。 只是一个fyi,我的程序不在线程之间共享任何数据,它获取列表中的一项并进行一些数学运算并将结果上传到数据库。 理想情况下,一些工作计算机会获得列表中的一些项目,然后完成其工作,然后在完成之前获得更多工作 我做了一些研究并找到了队列,我不确定它是否是我需要的东西,或者是否有其他的东西(我也在考虑维护工人的诚信/监督可能对我来说太难以写作新手)。 我家里有4台电脑(一些Linux,mac和windows ..但我可以在所有非Linux系统上安装linux vm,如果这些解决方案特定于操作系统)并且想要让他们也开始处理这项任务。 我想创建Java队列,其他客户端采取一个部分和过程,但我也看到了库(rabbitmq)。 我还简要介绍了网格计算。 这是要走的路还是有更好的方法? 我不需要任何代码或任何东西只是想知道分发线程的解决方案是什么,或者在评估它们时使用哪些因素。

优雅地将队列长度指示符实现到ExecutorServices

为什么,为什么java.util.concurrent没有为其ExecutorService提供队列长度指示器? 最近我发现自己做了这样的事情: ExecutorService queue = Executors.newSingleThreadExecutor(); AtomicInteger queueLength = new AtomicInteger(); … public void addTaskToQueue(Runnable runnable) { if (queueLength.get() < MAX_QUEUE_LENGTH) { queueLength.incrementAndGet(); // Increment queue when submitting task. queue.submit(new Runnable() { public void run() { runnable.run(); queueLength.decrementAndGet(); // Decrement queue when task done. } }); } else { // Trigger error: too long queue […]

Java中的快速队列

我正在寻找Java中的快速queue实现。 我看到LinkedList实现了Queue接口,但它只能和LinkedList一样快吗? 有没有办法让队列更快,特别是对于add (我只需要poll , add和检查为empty )。 我可能还需要一个PriorityQueue但还没有。

为什么将队列实现为循环数组?

当实现像队列这样的FIFO时,我的教师总是建议我们将它表示为圆形数组而不是常规数组。 为什么? 是因为在后者中,我们最终会在arrays中有垃圾数据吗?

LinkedList,队列与列表的区别

创建这两个对象有什么区别 Queue test = new LinkedList(); 和 List test2 = new LinkedList(); test和test2之间的实际差异是什么? 他们俩都是LinkedList吗? 是否存在使用其中一个的性能差异或原因?

@Async阻止线程继续,直到其他线程完成

我有一个应用程序,其中需要计算一定数量的东西。 此计算函数具有注释@Async(来自Spring Framework),这使得可以在4个线程上运行这些计算。 问题是我需要大约40000个这样的计算,我想知道所有计算的开始和结束之间的时间,所以我看看在调用计算函数的for循环之前和之后的时间。 但是现在所有的计算都被放入队列中,因此for循环立即结束,时间就像1秒钟,而计算完成需要几个小时。 我已经尝试将最大队列大小设置为大约100(也很好地减少了内存使用量),但这也没有解决方案,因为我将错过它花费的总时间中的最后100次计算。 有没有办法在for循环之后暂停执行代码,直到所有线程完成其工作,但仍然能够使用@Async注释? 这是一些说明相同问题的代码: 执行课程: public class Foo { public void executeBlaALotOfTimes() { long before = System.currentTimeMillis(); for (int i = 0; i<40000; i++) { executeBla(); } long after = System.currentTimeMillis(); System.out.println("Time it took for a lot of bla to execute: " + (after – before) / 1000.0 + " seconds."); […]

List vs Queue vs Java中的集合集

列表,队列和集合之间有什么区别?