최근 Apache Commons-IO의 클래스 CountingInputStream
을 사용했습니다. 카운터 필드를 업데이트하여 읽은 바이트 수를 계속 추적합니다.InputStream을 동기화하면 어떤 이점이 있습니까?
synchronized
키워드로 카운터를 업데이트 한 것으로 나타났습니다. 내가 찾을 수있는 최고의 소스는 IO-201이지만 그 이유는 설명하지 않습니다.
아파치 코 몬즈 코드가 좋은 품질을 가지고있는 곳을 몇 군데 읽었지만, 지금은 InputStream에서 동기화 된 메소드가 왜 궁금합니다. 스레드 안전이 스트림에서 유용한 속성이라고 생각하지 않으며 IO-201의 주석을 쓰지 않습니다.
내가 InputStream에 동시에 액세스하지 못한다면, 메소드를 동기화 할 유효한 이유가 있습니까? 또는 데이터 쓰레기를 생성하지 않는 InputStream에 동시에 액세스하는 유효한 유스 케이스가 있습니까?
데이터 쓰레기를 가져 오지 않고 InputStream을 동시에 읽는 방법을 생각할 수 없습니다. 그래서 동시성은이 '동기화 된'동기화의 동기가 될 수 없다고 생각합니다. 그러나 어쩌면 그것은 나의 제한된 상상 일뿐입니다. 나는 걱정할 필요가 없다, 나는 그저 뭔가를 배우려는 동기를 이해하기를 원한다. –
알겠습니다. 또 다른 스레드는'getCount()'를 호출 할 수 있습니다. 동기화 작업이 없으면 메모리 모델이 시작되고 다른 스레드는 업데이트를 볼 수 없습니다. 좋아, 만족해. 휘발성 대신에 동기화도 아마 같은 일을 할 것입니다, 그렇죠? –
아니요, 'volatile'변수를 증가 시키면 스레드가 안전하지 않습니다. –