2011-12-01 4 views
0

백그라운드에서 실행되는 몇 개의 스레드가 있습니다. 공통점은 HashMap입니다. (안전하게) PipedOutputStream을 저장할 수 있습니까?스레드에 대한 HashMap의 PipedOutputStream

최초의 백그라운드 스레드가 특정 이벤트를 수신

,이 버퍼에 큰 파일에서 읽은 텍스트 데이터를 시작해야합니다

나는이 다음과 같은 시나리오를 가지고있다.

두 번째 백그라운드 스레드 (독립적 임)는 어떻게 든 알리고 그런 다음 버퍼 (파이프)에서 데이터를 읽을 때이를 읽어야합니다.

모든 스레드가 HashMap에 액세스 할 수 있으므로 모든 스트림을 저장하는 것이 좋습니까?

답변

0

ConcurrentHashMap을 사용할 수 있습니다. 나는 어쨌든 당신이 어디서 읽었는지에 앞서 파일이 OS에 의해 읽혀질 것이므로 여기에 파이프를 사용하는 것에 많은 점을 보지 못한다.

+0

마지막 주석을 이해하지 못했습니다. 파일에서 한 줄씩 데이터를 읽고 첫 번째 스레드에서 파이프에 쓰고 두 번째 스레드의 파이프에서 프로세스의 도착 데이터를 읽으려고합니다. – kenny

+0

그게 뭘 원하는지 이해하지만, 성능상의 이유로 OS가 당신 앞에서 데이터를 읽고 파일 설명자 버퍼에 추가하면 실망하게 될 것입니다 (파이프가 사용하는 것입니다) 그것은 당신이 읽는 것입니다. 즉, OS가 이미 수행 한 작업을 복제 할 가능성이 큽니다. –

+0

이것은 재미있다, 고마워. 그러나 나는 다른 단계에서 성과를 얻을 것이며, 나는 전체 흐름을 설명하지 않았다. (질문에 중요하지 않기 때문에). "오래된"방법은 처음부터 끝까지 데이터를 읽고 다른 파일에 쓰는 것이고 새 파일 만 처리했습니다. 새로운 방법으로 나는 임시 파일을 건너 뜁니다. – kenny

0

HashMap이 동기화되어 있지 않으므로 논리를 추가하거나 동기화 된 컬렉션을 사용해야합니다. 스트림에 관해서는, 당신은 오직 OutputStream에만 쓸 수 있고 InputStream에서 읽는 것만으로도 한 스레드에서 쓰고 다른 스레드에서 읽는 데 문제가 없습니다.