- 자바에서 소비자의 구현과 내가 나오지 않았어자바 예를 들어 나는 단순한 생산자를 찾고 있어요
바퀴를 재발견하고 싶지 않아 새로운 동시성 패키지와 Piped 클래스 중 하나를 사용하는 예제를 찾으십시오
여기에 PipedInputStream과 새로운 Java 동시성 패키지를 모두 사용하는 예제가 있습니까?
그런 작업에 Piped 클래스를 사용하지 않고 더 좋은 방법이 있습니까?
- 자바에서 소비자의 구현과 내가 나오지 않았어자바 예를 들어 나는 단순한 생산자를 찾고 있어요
바퀴를 재발견하고 싶지 않아 새로운 동시성 패키지와 Piped 클래스 중 하나를 사용하는 예제를 찾으십시오
여기에 PipedInputStream과 새로운 Java 동시성 패키지를 모두 사용하는 예제가 있습니까?
그런 작업에 Piped 클래스를 사용하지 않고 더 좋은 방법이 있습니까?
작업을 수행 할 때 데이터베이스에서 읽는 동안 하나의 스레드 만 사용하고 BufferedOutputStream
을 사용하여 파일에 쓰는 것으로 충분할 수 있습니다.
class Producer implements Runnable {
private final OutputStream out;
private final SomeDBClass db;
public Producer(OutputStream out, SomeDBClass db){
this.out = out;
this.db = db;
}
public void run(){
// If you're writing to a text file you might want to wrap
// out in a Writer instead of using `write` directly.
while(db has more data){
out.write(the data);
}
out.flush();
out.close();
}
}
class Consumer implements Runnable {
private final InputStream in;
private final OutputStream out;
public static final int CHUNKSIZE=512;
public Consumer(InputStream in, OutputStream out){
this.out = out;
this.in = in;
}
public void run(){
byte[] chunk = new byte[CHUNKSIZE];
for(int bytesRead; -1 != (bytesRead = in.read(chunk,0,CHUNKSIZE));;){
out.write(chunk, 0, bytesRead);
}
out.close();
}
}
그리고 호출 코드 :
FileOutputStream toFile = // Open the stream to a file
SomeDBClass db = // Set up the db connection
PipedInputStream pi = new PipedInputStream(); // Optionally specify a size
PipedOutputStream po = new PipedOutputStream(pi);
ExecutorService exec = Executors.newFixedThreadPool(2);
exec.submit(new Producer(po, db));
exec.submit(new Consumer(pi, toFile));
exec.shutdown();
는 버퍼 크기와 덩어리의 크기보다 효율적으로 관리 파일에 기록하려면
, 당신은 이런 식으로 뭔가를 할 수
이 모든 작업을 수행하는 경우 ExecutorService
을 사용하면 이점이 없습니다. Executors는 많은 작업 (동시에 많은 스레드를 실행할 수있는 너무 많은 작업)이있는 경우 유용합니다. 여기서 동시에 실행해야하는 스레드는 두 개 뿐이므로 Thread#start
을 직접 호출하면 오버 헤드가 줄어 듭니다.
정확히 무엇을 달성하려고합니까? 당신은 매우 광범위한 질문을했습니다. 파이프가있는 스트림으로 작업하면 스레드를 시작하는 데 신경 쓰지 않아도됩니다. –
소비자와 생산자를 위해'Runnable'을 만들어서'ExecutorService'에 제출하고 싶습니까? – trutheality
작업은 단순히 데이터베이스에서 읽은 다음 비 차단/비동기/버퍼 방식으로 파일에 쓰고 질문에 언급 된 도구는 작업에 적합한 도구라고 생각한 것입니다. 다른 방법으로, 나는 기꺼이 듣겠습니다 –