将一组对象从一个线程传递到另一个线程的最快数据存储是什么?

reg*_*fin 3 java performance storage

我有两个线程,一个读取流并从其内容生成数据对象.

然后我必须将它们传递给第二个线程,将它们写入数据库.

我想分开这两个任务(这就是为什么我采用两个线程),因为流和数据库上的I/O-Performance有所不同.在某些情况下,流很快,有时,db有一些滞后.

所以我想在它们之间放一些(非常简单!)数据存储.

我的第一个想法是FILO解决方案,必须是线程安全的并且应该是快速的(没有花哨的东西,只是放置和拉动).订单无关紧要.在某些时候,存储中可能存在大约100,000个条目(在与db一起大约一秒钟之后就是这种情况).

每个对象占用空间小,<1kb.

你会给我什么推荐?

Pet*_*hev 6

这正是生产者 - 消费者模式.看看BlockingQueue及其实现.

以下是我博客的示例代码:

public class Producer implements Runnable {
    private BlockingQueue queue;

    public Producer(BlockingQueue queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        //Produce 1000 products
        for (int i = 0; i < 1000; i++) {
            queue.put(new Product());
            System.out.println("PRODUCED PRODUCT");
        }
    }
}
public class Consumer implements Runnable {
    private BlockingQueue queue;

    public Consumer(BlockingQueue queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while (true) {
            Product product = queue.take();
            System.out.println("CONSUMED PRODUCT");
        }
    }
}

And here is the calling code:
BlockingQueue queue = new ArrayBlockingQueue(50);

Producer producer = new Producer(queue);
new Thread(producer).start();

Consumer consumer = new Consumer(queue);
new Thread(consumer).start();
Run Code Online (Sandbox Code Playgroud)