我不確定以下情況的最佳解決方案是:在寫入數據庫時使用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