2012-08-07 6 views
-1

파일 배열의 각 루프마다 하나씩 있습니다. 각 파일에 대해 공통적으로 수행되는 특정 작업이 있습니다. 처리 할 파일이 많고 시간이 많이 걸립니다. 자바 스레드가 더 높은 성능을 얻을 수 있다면 제가 생각하고있었습니다. 나는 자바 스레드 프로그래밍에 익숙하지 않다. 도움이 필요하십니까파일 배열의 각 루프에 대해 각 루프마다 하나의 스레드를 생성합니다.

+0

어떤 연구를 했습니까? 너 뭐 해봤 니? 어떤 문서를 읽었습니까? – Gray

+0

@gray 나는 모바일에서이 질문을하고 있습니다. 시도한 코드가 없습니다. 나는 가능할 때 질문을 업데이트 할 것이다. 나는 오라클과 몇몇 사이트에서 제공 한 튜토리얼을 읽었습니다. – VamsiKrishna

답변

2

한다고 가정을 FileReader 클래스는 하나의 파일을 처리하는 로직을 포함

public class FileReader implements Runnable { 

String fileName; 

public FileReader(String fileName) { 
    this.fileName = fileName; 
} 

public void run() { 

processFile(fileName); 

} 

private void processFile(String fileName) { 
    // Your logic of processing the file. 
} 

} 

그런

당신은 항상 당신이 사용 확인하기 위해 스레드 풀을 사용한다 디렉토리에있는 파일을 처리하기 위해 다음 코드를 추가합니다 시스템 리소스 각 우아하게

private static final int THREAD_COUNT = 10; 
private static final ThreadPoolExecutor pool = new ThreadPoolExecutor(
     THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS, 
     new LinkedBlockingQueue<Runnable>()); 

01 처리 할 파일
FileReader reader = new FileReader(file.getAbsolutePath()); 
    pool.execute(reader); 
+0

이 질문에 대한 답변입니다. 감사. 이것을 구현하고 작업 코드를 게시합니다. – VamsiKrishna

1

정말 각 파일에 대해해야 할 일과 병목 현상이 프로세싱에 어디에 있는지에 따라 다릅니다. 만약 당신이 처리하고있는 CPU - 바운드 (파일에서 읽은 데이터에 대한 많은 계산을해야합니다), 그럼 당신은 그들을 도울 CPU 코어를 가지고 더 많은 스레드를 만드는 것은 도움이되지 않습니다.

반면에 처리가 "파일 데이터를 서버에 제출하고 응답을 기다리십시오."및 요청을 동시에 전송해도 서버 속도가 느려지지 않으므로 파일 당 스레드가 도움이 될 수 있습니다 .

처리가 무엇에 관한 것인지 알지 못하면 실제로 부여 할 수있는 구체적인 권장 사항이 없습니다.

+0

파일에 대한 작업은 파일 읽기 작업입니다. 파일을 읽고 파일을 편집하고 다시 저장합니다. – VamsiKrishna

+0

모든 스레드를 관리하는 추가 오버 헤드가 끝나기 전에 동시에 실행할 수있는 스레드 수를 알아 내려면 몇 가지 테스트를 수행하는 것이 좋습니다. @byter가 제안한 ThreadPoolExecutor 클래스는 프로그램에서 사용하는 스레드 수를 제한하는 좋은 방법입니다. –

+0

입력 내용에 @Joethanks가 있습니다. 예 스레드 풀은 내가 찾고있는 것이 었습니다. – VamsiKrishna

관련 문제