私は@Chris Kと合意しました。ここではキーはブロックキューを使用しています。タスク-AのDBThreadとタスク-BのPrinterThread、ResultSetのブロックキュー
class DBThread extends Thread {
private BlockingQueue<ResultSet> resultSets;
public DBThread(BlockingQueue<ResultSet> resultSets) {
this.resultSets = resultSets;
}
public void run() {
try {
resultSets.put(getResultsFromDB()); //resultSets.put() call will block if the queue is full
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private ResultSet getResultsFromDB() {
ResultSet resultSet = fromDB(); //some method to get ResultSet from DB
return resultSet;
}
}
class PrinterThread extends Thread {
private BlockingQueue<ResultSet> resultSets;
public PrinterThread(BlockingQueue<ResultSet> resultSets) {
this.resultSets = resultSets;
}
public void run() {
try {
printLogs(resultSets.take()); //resultSets.take() call will block if the queue is empty
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void printLogs(ResultSet resultSet) {
//print rows
}
}
class Main {
public static void main(String[] args) {
BlockingQueue<ResultSet> resultSets = new LinkedBlockingQueue<>(10);
DBThread dbThread = new DBThread(resultSets);
PrinterThread printerThread = new PrinterThread(resultSets);
dbThread.start();
printerThread.start();
}
}
通信用のキューで結合された2つのスレッド(コンシューマとプロデューサ)の作成を見てみましょう。ここでの例:http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html –
2つのタスクでは2つのスレッドを意味しますが、Javaでlambdaを使用する方法をうまく示しているので、これを見てください。 8で簡単に別のスレッドを開始するhttps://www.youtube.com/watch?v=1OpAgZvYXLQ – TJA
ありがとう!これは私の問題を解決すると思われる:) @クリスK –