2011-02-25 6 views
3

스레드를 사용하는 시나리오가 있습니다.Java에서 다중 스레드 풀을 구현하는 방법

먼저 자주 업데이트되는 파일이있는 폴더가 있습니다. 그래서 폴더의 내용을 읽고 파일 이름을 정적 목록에 쓰고 새 파일이 들어오는 경우 목록을 업데이트하는 스레드를 작성했습니다.

두 번째로 목록에서 파일 이름을 사용하는 다른 스레드를 작성했습니다 파일을 사용하여 일부 처리를 수행하십시오.

이 두 스레드는 연속적으로 실행됩니다. 하나는 새 파일을 검사하고 다른 하나는 새 파일을 검사합니다.

이제 3 개의 스레드를 실행하면서 한 번에 3 개의 파일을 처리해야합니다. 한 스레드가 처리를 완료하면 다른 스레드는 목록에서 다른 파일 이름을 가져 와서 프로세스를 시작합니다.

그래서 세 개의 스레드를 가지고 있으며 스레드가 살아 있는지 여부를 확인하고 이에 따라 새 스레드를 시작하고 파일 목록도 자주 업데이트되는 메커니즘이 필요합니다.

나는 또한 ExecutorService을 조사했지만 목록이 업데이트되는 동안 업데이트 된 목록을 제공하지 못했습니다.

감사합니다, 하기 Sandeep

+0

별로 명확하지 않지만 걱정됩니다. 왜 3이고, 임의의 숫자가 아닌가? 스레드가 살아 있는지 확인해야하는 이유는 무엇입니까? –

+0

필자는 추가 할 예정이었습니다. 사용할 자연스러운 데이터 구조가 대기열 (http://download.oracle.com/javase/6/docs/api/java/util/Queue.html) 인 것 같습니다. 이를 이용하려면 대기열에서 항목을 가져 와서 작업을 수행하는 소비자 스레드가 있어야합니다. –

답변

2

건물, 코드가 같을 것 집행자에게 제출하십시오.

+0

감사합니다 .. 내 문제가 해결되었습니다 .... – Sandeep

0

목록을 사용하지 마십시오; 대신에 java.util.concurrent.ThreadPoolExecutor를 사용해, 처리 할 파일을 글로벌리스트에두기보다는 Executor에 넣을 Runnable을 드롭하면됩니다. 그렇지 않으면 당신은 전에 약간의 조절 메커니즘에 넣고 싶어,

final ExecutorService executor = Executors.newFixedThreadPool(2); 

    final FilePoller poller = ... 
    final FileProcessor processor = ... 

    new Thread(new Runnable() 
     { 
     @Override 
     public void run() 
     { 
      while (true) 
      { 
      final File file = poller.pollForFile(); 
      executor.submit(new Runnable() { public void run() { processor.processFile(file); } }); 
      } 
     } 
     }); 

이 잘 될 것 폴러로 유지할 수있는 프로세서를 가정 : 기존의 답변에

0

@ SimonC의 제안과 비슷하지만 정말로 긴 의견 대신 대답이 있습니다.

final FilePoller poller = ... 
final FileProcessor processor = ... 

final ExecutorService executor = Executors.newFixedThreadPool(4); 

executor.submit(new Runnable() { 
    public void run() { 
     final File file = poller.pollForFile(); 
     executor.submit(new Runnable() { public void run() { processor.processFile(file); } }); 
     // repeat, but wait for a free thread. 
     executor.submit(this); 
    } 
    }); 
// to stop the whole thing 
executor.shutdown(); 
0

어떻게 통지 변화가 당신에게 폴더에 변경 사항 목록을 제공하는 것으로서 폴더에 변경보고 및 스레드/파일을 산란에 대한?

관련 문제