blockingqueue相关内容
我正在寻找一种阻止方式,直到 BlockingQueue 为空。 我知道,在多线程环境中,只要有生产者将项目放入 BlockingQueue ,就可能出现队列变空并且在几纳秒后队列中充满项目的情况。 但是,如果只有一个 生产者,那么它可能要等待(并阻塞)直到队列停止后为空。将项放入队列。 Java /伪代码: / /生产者代码 BlockingQueue queue =
..
我有两个单独的阻止队列。客户通常使用第二个阻塞队列中的第一个来检索要处理的元素。 在某些情况下,客户对两个阻塞队列中的元素感兴趣, 客户端如何并行等待两个队列? 解决方案 您可以尝试使用 投票 方法在某种循环中仅等待指定数量的 除此之外,我想说的是在单独的线程上为每个队列运行阻塞操作,并为您的服务器提供回调接口主要应用是另一个稍微复杂一些的选项。
..
我想知道使用BlockingQueue代替(PipedOutputStream和PipedInputStream)的优点 import java.io.*; import java.util.concurrent.*; public class PipedStreamVsBlocking { public static void main(String... args) {
..
我有一个基于 Marc Gravell的 现在,我遇到了只想让某个对象出队的情况,我知道这实际上并不是队列的用例,但是在某些情况下,我认为这是一个很好的扩展,例如等待某个网络答案 这类似于 TryDequeueWhere(Func expression, out T value, int? waitTimeInMs = null) 问题是我不知道如何等待和阻止某个
..
此问题是对这个问题. 本质上,我正在做的是声明只有一个线程的ThreadPoolExecutor.我重写了beforeExecute()方法以使自己进入睡眠状态,以便我的每个任务之间的执行都有一定的延迟.基本上,这是为了将CPU分配给其他线程,因为我的线程有点不正常. 所以预期的行为是: 对于ThreadPoolExecutor中的每个新任务,它都会在执行任务之前调用before
..
我正在尝试调整执行以下操作的线程: 只有1个线程[CorePoolSize =0, maxPoolSize = 1] 的线程池 使用的队列是 Quesize = 20 背景: 线程尝试读取请求并对其执行操作. 但是,最终,请求的增加如此之多,以至于线程一直很忙,并消耗了1个CPU,这使它成为了资源消耗. 我想做的是,不定期采样请求并进行处理.其他请求可以安全地忽略.
..
我在两个类中都有一个名为process的方法,可以说CLASS-A and CLASS-B.现在,在下面的循环中,我依次调用两个类的process method,意思是一个接一个,并且工作正常,但这不是我想要的方式. for (ModuleRegistration.ModulesHolderEntry entry : ModuleRegistration.getInstance()) {
..
我使用信号量来限制访问函数的线程数.我希望接下来要唤醒的线程应该由我要赋予的优先级选择,而不是默认情况下信号量唤醒的线程?我们如何实现这一目标? 这里是实现: class MyMathUtil2 implements Runnable { double a; double b; String name = "demo"; Thread t; //
..
我将生产者和消费者与BlockingQueue相关联. 消费者等待队列中的记录并对其进行处理: Record r = mQueue.take(); process(r); 我需要从其他线程暂停此过程一段时间.如何实施? 现在我认为可以实现它,但这似乎是一个糟糕的解决方案: private Object mLock = new Object(); private bool
..
在使用BlockingQueue消费生成的数据时,等待数据出现的最有效方法是什么? 场景: 第1步):数据列表将是添加了时间戳记的数据存储.要求这些时间戳按最接近当前时间优先级的顺序进行排序.此列表可能为空.一个线程将在其中插入时间戳. 生产 步骤2)我想在另一个线程中使用这里的数据,该线程将从数据中获取时间戳,并检查它们是否在当前时间之后. 消费者,然后生产 第3步)(如
..
我知道这个问题以前已经被问过很多次,但是我只是想不通互联网上的例子,例如这两种解决方案都在put()方法中检查阻塞队列的数组/队列/链表是否为notifyAll等待线程,反之亦然.第二个链接中的评论强调了这种情况,并指出这是不必要的. 问题是;检查队列是否为空对我来说似乎也有些奇怪.通知所有正在等待的线程.有什么想法吗? 谢谢. 解决方案 到目前为止,我知道这是一个老问题,但是
..
什么时候比ArrayBlockingQueue更喜欢LinkedBlockingQueue? 在以下情况下,在LinkedBlockingQueue和ArrayBlockingQueue中使用哪种数据结构: 您想要有效的读写 应该减少内存占用量 尽管存在类似的问题,但并未突出哪个应该被优先考虑的事实? 链接: Java:ArrayBlockingQueue与Link
..
我需要在其队列已满时阻止ForkJoinPool上的线程。 这可以在标准的ThreadPoolExecutor中完成,例如: private static ExecutorService newFixedThreadPoolWithQueueSize(int nThreads,int queueSize) { 返回新的ThreadPoolExecutor(nThreads,nThread
..
从文件内容填充队列时,深度似乎不会增加,因为此实现中未添加元素。 BlockingQueue q = new SynchronousQueue(); ... fstream = new FileInputStream(“/ path / to / file.txt”); ... while((line = br.readLine())!=
..
我有一个阻塞对象队列。 我想编写一个阻塞的线程,直到队列中有一个对象为止。类似于BlockingQueue.take()提供的功能。 但是,由于我不知道我是否能够成功处理对象,我想偷看()而不是删除对象。我只想在能够成功处理它的情况下删除该对象。 所以,我想要一个阻塞的peek()函数。目前,peek()只是在队列为空时根据javadoc返回。 我错过了什么吗?还有其他方法
..
使用ArrayBlockingQueue更好的情况是什么?使用LinkedBlockingQueue什么时候更好? 如果LinkedBlockingQueue默认容量等于MAX Integer,将它用作具有默认容量的BlockingQueue真的很有帮助吗? 解决方案 ArrayBlockingQueue 支持一个大小在创建后永远不会改变的数组。将容量设置为 Integer.MAX_VA
..
我有这段代码。 LinkedBlockingQueue 只有在等待添加到队列时被中断时才会抛出异常。但是这个队列是无限的,所以它应该尽快添加。为什么我的shutdown方法抛出 InterruptedException ? private final LinkedBlockingQueue
..
我想知道是否可以使用Semaphore来实现阻塞队列? 在下面的代码中,我使用一个Semaphore来保护关键部分,还有两个信号量对象跟踪空槽和填充对象的数量。 公共类BlockingQueue { private List queue = new LinkedList(); private int limit; 私人信号量插槽; //空信号
..
我正在开发一个多线程项目,我需要生成多个线程来测量客户端代码的端到端性能,因为我正在进行负载和性能测试。所以我创建了下面的代码,它使用 ExecutorService 。 下面的代码是 ExecutorService : public class MultithreadingExample { public static void main( String [] args)抛出
..
我有一个单线程生成器,它创建了一些任务对象,然后将它们添加到 ArrayBlockingQueue (具有固定大小)。 我还启动了一个多线程消费者。这是一个固定的线程池( Executors.newFixedThreadPool(threadCount); )。然后我向这个threadPool提交了一些ConsumerWorker入口,每个ConsumerWorker都对上面提到的Array
..