我不确定以下情况的最佳解决方案是:在写入数据库时使用java读取tcp流
我的Java程序永久从tcp-stream中读取数据。同时,将这些数据保存到数据库是必要的。应该写入数据库的数据量可能有所不同
我已经阅读了很多关于消息队列系统等等。详细地说,我的解决方案会考虑使用LinkedBlockingQueue。从而,有两个线程: 一个)启动,其将执行从TCP流 b读取)开始一个消费者威胁,这将从流中(解析)数据写入到数据库
生产者威胁在(示例 - )的代码看起来像以下:
Main.java
public static void main(String[] args) {
LinkedBlockingQueue queue = new LinkedBlockingQueue(50);
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue, producer);
Produer.java
public class Producer implements Runnable {
private LinkedBlockingQueue queue;
private boolean running;
public Producer(LinkedBlockingQueue queue) {
this.queue = queue;
running = true;
}
@Override
public void run() {
//read TCP-Stream here and save parsed messages to queue
}
public boolean isRunning() {
return running;
}
Consumer.java
public class Consumer implements Runnable {
private Producer producer;
private LinkedBlockingQueue queue;
public Consumer(LinkedBlockingQueue queue, Producer producer) {
this.queue = queue;
this.producer = producer;
}
@Override
public void run() {
//insert data into database here
if(producer.isRunning()) {
//while producer is running, data needs to be inserted to database
}
}
这是您会推荐使用的解决方案吗?或者你知道更好的解决方案吗?
谢谢!
是的,这几乎是一种标准方法。你也可以看看ExecutorService。复制[生产者/消费者线程使用队列](http://stackoverflow.com/questions/2332537/producer-consumer-threads-using-a-queue)(因为代码不是特定于tcp /数据库)。 –
我没有看到两个线程的原因。我会一起做。没有收获。 – EJP