相关疑难解决方法(0)

您应该在哪里使用BlockingQueue实现而不是简单队列实现?

我想我会重新提出我的问题

您应该在哪里使用BlockingQueue实现而不是简单队列实现?

BlockingQueue优于队列实现的优点/缺点是考虑速度,并发性或其他属性等方面,例如访问最后一个元素的时间.

我使用过这两种队列.我知道Blocking Queue通常用于并发应用程序.我正在编写简单的ByteBuffer池,我需要一个ByteBuffer对象的占位符.我需要最快,线程安全的队列实现.甚至像ArrayList这样的List实现也具有元素的持续访问时间.

任何人都可以讨论BlockingQueue与Queue vs List实现的优缺点吗?

目前我使用ArrayList来保存这些ByteBuffer对象.

我应该使用哪种数据结构来保存这些对象?

java queue

23
推荐指数
1
解决办法
3万
查看次数

阻止队列 - 需要更多信息

这个问题与我之前的一个问题有关..

上一篇文章

在那里,提到阻塞性质是一个优点.

我尝试开发一些简单的代码来演示阻塞性,但是我遇到了困难.我只是尝试制作一个BlockingQueue4号尺寸并尝试添加5个元素并最终得到了一个java.lang.IllegalStateException.有人能给我看一个阻止性质的代码示例BlockingQueue吗?


public static void main(String[] args) {
    BlockingQueue<String> bq = new LinkedBlockingQueue<String>(4);

    try {
        bq.offer("A");
        bq.offer("B");
        bq.offer("C");
        bq.offer("D");
        bq.offer("E");

        System.out.println("1 = " + bq.take());
        System.out.println("2 = " + bq.take());
        System.out.println("3 = " + bq.take());
        System.out.println("4 = " + bq.take());
        System.out.println("5 = " + bq.take());
        System.out.println("6 = " + bq.take());
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用了这段代码.在这种情况下,我试图将5个元素放入大小为4的队列中.在这种情况下,应将4个元素(A,B,C,D)添加到队列中.然后我take()在打印时调用方法.我打电话时不应该自动将"E"插入队列System.out.println("1 = " + bq.take());吗?因为它有一个免费插槽?

java queue concurrency data-structures

5
推荐指数
1
解决办法
6863
查看次数

如何在不删除的情况下避免100%的CPU利用率(true)

我正在研究一个我需要一段时间(真实)的系统,其中循环不断地监听队列并增加内存中的计数.

数据不断进入队列,所以我无法避免一段时间(真实)的情况.但自然它会将我的CPU利用率提高到100%.

那么,我怎样才能保持一个活跃的线程来监听队列的尾部并执行一些操作,但同时将CPU利用率降低到100%?

java multithreading

-1
推荐指数
1
解决办法
5130
查看次数