120得票10回答
如何让ThreadPoolExecutor在排队之前增加线程数达到最大值?

对于支持许多人使用的ExecutorService线程池的默认行为ThreadPoolExecutor 我已经感到沮丧了一段时间。引用Javadocs的话: 如果正在运行的线程数超过corePoolSize但小于maximumPoolSize,则仅在队列已满的情况下创建新线程。 这意味着,...

98得票5回答
如何中断在take()操作上阻塞的BlockingQueue?

我有一个类,它从BlockingQueue获取对象并通过连续调用take()方法处理它们。在某个时刻,我知道不会再往队列中添加更多的对象了。那么,如何中断take()方法以停止阻塞呢? 这是处理对象的类:public class MyObjHandler implements Runnabl...

79得票2回答
何时选择LinkedBlockingQueue而不是ArrayBlockingQueue?

何时应该选择LinkedBlockingQueue而不是ArrayBlockingQueue? 在以下情况下,应该使用哪种数据结构:LinkedBlockingQueue和ArrayBlockingQueue: 希望实现高效的读写操作 需要更少的内存占用 虽然有一个类似的问题,但它没...

73得票6回答
阻塞队列和多线程消费者,如何知道何时停止

我有一个单线程的生产者,创建一些任务对象并将它们添加到 ArrayBlockingQueue 中(大小是固定的)。 我还启动了一个多线程消费者。这是构建为固定数量线程池 (Executors.newFixedThreadPool(threadCount);)。然后,我向该线程池提交一些 Co...

65得票6回答
何时应该使用SynchronousQueue而不是LinkedBlockingQueue?

new SynchronousQueue() new LinkedBlockingQueue(1) 这两者有何不同?我应该在什么情况下使用具有容量1的SynchronousQueue而不是LinkedBlockingQueue?

64得票6回答
ExecutorService与ThreadPoolExecutor使用LinkedBlockingQueue的区别

我正在开发一个多线程项目,需要生成多个线程来测试我的客户端代码的端到端性能,因为我正在进行负载和性能测试。所以我编写了下面的代码,它使用ExecutorService。 以下是使用ExecutorService的代码:public class MultithreadingExample { ...

64得票6回答
C++11中有并发容器吗?

特别是,我正在寻找一个阻塞队列。C++11中有这样的东西吗?如果没有,我的其他选择是什么?我真的不想再自己降到线程级别了,太容易出错了。

46得票4回答
ArrayBlockingQueue和LinkedBlockingQueue有什么区别?

在哪些场景中最好使用ArrayBlockingQueue?什么时候使用LinkedBlockingQueue更好? 如果LinkedBlockingQueue的默认容量等于MAX Integer,那么将其用作具有默认容量的BlockingQueue是否真的有所帮助?

40得票8回答
Java的BlockingQueue没有阻塞的peek方法?

我有一个阻塞对象队列。 我想编写一个线程,它会一直阻塞到队列中有一个对象为止,就像BlockingQueue.take()函数提供的功能一样。 然而,由于我不知道是否能够成功处理该对象,所以我只想进行peek()操作,而不是删除该对象。只有在成功处理该对象时才想要将其删除。 所以,我需要...

39得票2回答
Java阻塞队列take()和poll()方法的区别

在无限循环中从队列中提取值时,哪种方法更有效: 1.在队列上阻塞直到通过take()获得可用的值while (value = queue.take()) { doSomething(value); } 睡眠n毫秒并检查项目是否可用while (true) { if ((value ...