-1

여러 스레드가 List 로그에 쓸 수있는 로깅을 구현하고 있습니다. 마지막 스레드는 List의 내용을 파일에 써야합니다. 따라서 마지막으로 List에 쓰는 스레드는 List을 파일로 플러시해야합니다. 가장 좋은 방법은 무엇입니까?여러 스레드가 도착했습니다. 마지막으로 처리해야합니다.

List 나는 여러 작성자와 하나의 판독기에 효율적인 동시 클래스 중 하나만 있으면됩니다.

+0

귀하의 질문에 답하기에는 너무 특이하지 않습니다. 예를 들어 스레드가 마지막 스레드임을 스레드가 어떻게 알 수 있습니까? –

+0

@ RolfSchäuble 그건 문제의 일부입니다. 스레드는 파일에 쓰려고 시도해야합니다. 후속 스레드는 동일하게 수행해야하지만 이미 쓰여진 내용을 파일에 쓰지 않아야합니다. 논리는 다음과 같습니다. 다른 스레드가 대기 중이 아닌 경우 작성하십시오. 이 경우 큐의 마지막 스레드가 작성해야합니다. – Roland

+0

@Roland 왜 각 스레드가 파일에 데이터를 쓰거나 인터리브 쓰기를 피하기 위해 파일 액세스를 동기화하지 않을까요? 그럴 수 없다면 시나리오에 대한 자세한 내용이 도움이 될 것입니다. 여전히 매우 모호합니다. –

답변

-1

내 솔루션 :

  1. 스레드의 수를 결정가 (N 말) (카운트가 0 인까지) 모든 스레드 목록의 값을 채울 수
  2. 대기 카운터로 N과
  3. 시작합니다 CountDownLatch를
  4. 원하는 경우 주 목록의 파일에 목록을 저장하십시오.

    또는

  5. 는 메인 스레드에서 새로운 스레드를 생성하고 파일에 목록을 저장합니다. CountDownLatch의 사용에 포스트 아래에

참조 :

How is CountDownLatch used in Java Multithreading?

자바에서 사용할 수있는 유일한 동시 목록 모음입니다 : CopyOnWriteArrayList

ArrayList의 thread 세이프 인 변수에 기본 배열의 새로운 복사본을 만들어 모든 변경 작업 (추가, 설정 등)이 구현됩니다. 내 경우

0

간단한 해결책은 Closeable을 구현하고 close 방법으로 세척을 할 수 있었다.