2014-02-21 2 views
-1

파일을 순차적으로 읽는 FileProcessor를 만들고 싶습니다. 이 클래스는 여러 스레드에서 액세스하며 각 스레드는 행을 읽고 해당 행을 처리 한 후 데이터 구조에 저장합니다. 지금까지 나는 다음과 같이 디자인 문제를 해결하는 단계를 상상했습니다.자바에서 텍스트 파일의 행을 다른 스레드로 한 번만 전달하는 방법

  1. 클래스 FileProcessor with tasks : 파일을 여는 메소드 getline. BufferedReader는 각 행을 읽고 그 행을 반환합니다.

  2. 두 번째 클래스는 실행 파일을 구현하는 FileThread입니다. 실행 메소드에서 FileProcessor 객체의 getline()을 호출하십시오. 이 스레드는 또한 라인을 처리하고 데이터 구조에 저장합니다.

  3. 3 등급은 FileThreads의 여러 스레드를 크레이트합니다.

나는이 디자인이 내가 상상할 수있는 결함이 있음을 알고있다.

  1. 각 스레드가 EOF에 도달하여 멈추는 지 알 수있는 방법.
  2. FileProcessor에서 파일을 정상적으로 읽는 동안 EOF를 감지하거나 한 줄씩 읽어야하고 threa가 EOF 조건을 처리해야합니다.

도와주세요.

+0

무엇을 했습니까? –

+0

내가 계획하고있는 디자인이 좋은지 또는 뭔가 잘못되어 있는지 알고 싶습니다. –

+0

영어가 아닌 프로그래밍 언어 측면에서 구체적으로 설명하십시오. 당신이하려는 것을 상상하기가 어렵습니다. – Lion

답변

1

아니요, 디자인이 좋지 않습니다.

Executor 풀을 인스턴스화하고 파일을 읽고 EOF에 대해 알아야 할 작업을 doles 밖으로 가져 오는 클래스입니다. 자신의 부분을 차지하고 작업을 수행하는 스레드는 알 필요가 없습니다.

원시 스레드는 사용하지 마십시오. Excecutor와 같은 새로운 동시성 클래스를 활용하십시오.

+0

버퍼 판독기 클래스의 단일 인스턴스를 만드는 방법을 공유하는 메서드를 공유하여 스레드 간의 동기화를 달성했습니다. –

관련 문제