모두 BufferReader 파일 읽기 모두, 스레드에서 해당 파일을 읽으려면 BufferedReader
을 사용하려고하는 파일을 여러 스레드에서 쓰려고합니다.여러 스레드가 파일에 쓸 때
코드는 다음과 같습니다.
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String detail;
while ((detail =br.readLine()) != null)
{
...
}
현재 잘 작동하는 것 같습니다. 하지만 그것에 대해 몇 가지 질문이 있습니다. 질문이 어리석은 경우. 제발 웃지 마세요. 감사.
루프가 깨진 적이 없습니까? 다른 스레드가 파일에 쓰고 있기 때문입니다. 어쩌면 readLine()
이 null을 반환하지 않을 수도 있습니다.
업데이트
의 3 개 스레드 (T1, T2, T3)이있는 가정 해 봅시다.
T1 및 T2는 기록기입니다.
T3는 독자입니다.
코드는 아래의 순서로 실행됩니다.
1. 현재 파일 행 번호 100
2.T1 파일 저장 라인을 작성한다. (파일 라인 (101)에 증가)
3.T3는 (101)에 파일의 마지막 행을 판독 . 다음의 read는 null를 리턴합니다.
4.T2
는 파일에 한 줄을 추가합니다. (파일 라인이 102 증가)5.T3 다시 읽어 ... (T2 그냥 파일에 새 줄을 추가했기 때문에? 널 여부를 반환 않는다 T3 읽기 전에 다시 읽으십시오.)
미리 검토해보십시오. 감사합니다.
독자가 작성자보다 더 빨리 읽는 경우 결국 파일 끝에 도착한 다음 null을 반환합니다. 그렇지 않다면 파일 시스템에 여유 공간이 부족하고 작성자가 IOException으로 멈출 때 완료됩니다. –
@Pablo 내가 말한 경우가 발생할 수 있는지 확실하지 않습니다. 경주 문제처럼 들리니? 덕분에 –
시나리오를 시뮬레이션하려면 스레드 우선 순위 또는 절전 시간을 설정할 수 있습니다 – yushulx