나는 Task-A와 Task-B의 2 가지 작업을 가지고있다. Task-A는 ResultSet의 반환 유형을 가지며 DB에서 한 번에 1000 개의 행을 반환합니다. 이 작업은 DB에 10,000 개의 행이있는 10 번 실행될 것입니다 (DB의 행의 총 개수가 알려지지 않은 경우도 고려하십시오). Task-B에는 void 반환 유형이 있으며 Sysout 만 수행합니다. Task-A가 Task-B에 반환 한 처음 1000 개의 행을 전달해야하며 Task-B가 해당 행을 통해 작동하므로 Task-A를 병렬로 실행하여 Task-B가 처음 1000 개 레코드, 다음 1000 개 레코드 집합은 작업 -A에 의해 반환되어야합니다. 자바에서 어떻게 할 수 있는지 알려주세요. 가능한 경우 모든 코드 스 니펫이 도움이됩니다. 감사합니다Java에서 병렬로 2 개의 작업을 실행하는 방법은 무엇입니까?
1
A
답변
1
나는 여기에 키가 블로킹 큐를 사용하는 것에 동의합니다. 저는 한 가지 고급 솔루션 인 DBThread for Task-B와 PrinterThread for Task-B와 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();
}
}
관련 문제
- 1. 작업을 병렬로 실행하는 방법은 무엇입니까?
- 2. 타이머 작업을 병렬로 실행하는 방법은 무엇입니까?
- 3. 병렬로 여러 개의 비동기 작업을 올바르게 실행하는 방법은 무엇입니까?
- 4. Scalaz 작업을 병렬로 실행하는 방법
- 5. Ksh와 Perl에서 병렬로 작업을 실행하는 가장 좋은 방법은 무엇입니까?
- 6. 함수를 병렬로 실행하는 방법은 무엇입니까?
- 7. 여러 스레드에서 종속 작업을 병렬로 실행하는 방법은 무엇입니까?
- 8. Java에서 병렬로 두 개의 배열을 추가하는 방법은 무엇입니까?
- 9. Ruby에서 여러 개의 작업을 실행하는 방법은 무엇입니까?
- 10. 두 개의 매퍼 함수를 병렬로 실행하는 방법은 무엇입니까?
- 11. Bash에서 주어진 함수를 병렬로 실행하는 방법은 무엇입니까?
- 12. 별도의 CPU 코어에서 작업을 병렬로 실행하는 방법
- 13. Django에서 테스트를 병렬로 실행하는 방법은 무엇입니까?
- 14. Eclipse에서 Spark 처리를 병렬로 실행하는 방법은 무엇입니까?
- 15. Taskfactory 클래스를 사용하여 여러 개의 작업을 병렬로 만드는 방법은 무엇입니까?
- 16. 여러 개의 PIG 스크립트를 병렬로 실행하는 방법은 무엇입니까?
- 17. 박쥐 파일을 두 개의 병을 병렬로 실행하는 방법은 무엇입니까?
- 18. Transaction SQL을 사용하여 병렬로 실행하는 방법은 무엇입니까?
- 19. 2 개의 정수를 병렬로 추가
- 20. Erlang에서 프로세스를 병렬로 실행하는 방법은 무엇입니까?
- 21. pyspark를 사용하여 하나의 RDD에서 완전히 독립적 인 변환을 수행하는 2 개의 함수를 병렬로 실행하는 방법은 무엇입니까?
- 22. 여러 레일 환경을 병렬로 실행하는 방법은 무엇입니까?
- 23. Java에서 여러 목록을 병렬로 반복하는 방법은 무엇입니까?
- 24. Spark Executor가 여러 작업을 실행하는 방법은 무엇입니까?
- 25. 여러 DOS 명령을 병렬로 실행하는 방법은 무엇입니까?
- 26. 웹 프로젝트의 분기를 병렬로 실행하는 방법은 무엇입니까?
- 27. 서브 루틴을 병렬로 실행하는 방법은 무엇입니까?
- 28. specflow 기능 파일을 병렬로 실행하는 방법은 무엇입니까?
- 29. bash 스크립팅에서 병렬로 2 개의 루프 실행
- 30. Java에서 작업이 반복적으로 증가하는 방식으로 작업을 반복적으로 실행하는 방법은 무엇입니까?
통신을위한 대기열에 의해 결합 된 두 개의 스레드 (소비자 및 생산자) 작성을 살펴보십시오. 여기 예제 : http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html –
두 가지 작업으로 두 개의 스레드를 의미합니까? Java에서 람다를 사용하는 방법을 멋지게 보여주기 때문에이 두 가지 스레드를 살펴보십시오. 8 별도의 스레드를 쉽게 시작할 수 있습니다. https://www.youtube.com/watch?v=1OpAgZvYXLQ – TJA
감사! 이것은 내 문제를 해결하는 것, 시도합니다 :) @ 크리스 K –