reg*_*fin 3 java performance storage
我有两个线程,一个读取流并从其内容生成数据对象.
然后我必须将它们传递给第二个线程,将它们写入数据库.
我想分开这两个任务(这就是为什么我采用两个线程),因为流和数据库上的I/O-Performance有所不同.在某些情况下,流很快,有时,db有一些滞后.
所以我想在它们之间放一些(非常简单!)数据存储.
我的第一个想法是FILO解决方案,必须是线程安全的并且应该是快速的(没有花哨的东西,只是放置和拉动).订单无关紧要.在某些时候,存储中可能存在大约100,000个条目(在与db一起大约一秒钟之后就是这种情况).
每个对象占用空间小,<1kb.
你会给我什么推荐?
这正是生产者 - 消费者模式.看看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)