inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Nền tảng vững chắc! Bắt đầu quyết liệt với Java Phần 3(hạ) : Socket và File I/O

파일 접근 오류 (경쟁 조건) <-- Lock 관련 질문

Đã giải quyết

85

syh8088

77 câu hỏi đã được viết

0

image.png

해당 로직을 보니깐 리엔트리 락을 사용 하고 있는 것을 보여집니다.

그런데 말씀 하신 내용 처럼

 

T1 스레드가 "Hello"

T2 스레드가 "World"

 

특정 파일에 쓰기를 동시적으로 여러번 하는데

HWellorl <-- 이렇게 단어가 혼잡되어서 쓰기가 되지 않는 이유에 대해서 이해가 안가서 질문 드립니다.

 

1번 쓰레드가 writeData("Hello");

2번 쓰레드가 writeData("World");

 

이렇게 멀티스레드로 실행하게 된다면

writeData 메소드를 구현하신 내용을 보면

FileWriter writer = new FileWriter("C:/Tmp/test.txt");

이렇게 새롭게 인스턴스를 새롭게 만들어서 각각 실행하기 때문에

this.lock

해당 lock 객체를 호출 할때 각각 스레드 수준에서 ThreadSafe 한 것이 아닌가요? (제가 잘못 알고 있을 수도 있습니다! )

 

그러니깐 만약 이렇게

FileWriter writer = new FileWriter("C:/Tmp/test.txt");

Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                   writer.write("World");("Hello");
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    writer.write("World");
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        });

 

writer 전역 변수를 만약에 T1 쓰레드하고 T2 쓰레드가 동일하게 참조해서 사용한다면 이해가 갈텐데

선생님께서 만들어주신 코드는 지역 변수로 FileWriter 객체를 생성하고 지역 변수 내에서 소멸되기 때문에 T1, T2 하고 동시화 기법에는 동작 하지 않을 것 같아서 질문 드립니다.

 

 

java 네트워크 tcpsocket

Câu trả lời 1

0

nullnull8537

우선 Java에는 전역 변수가 없습니다. 대신 클래스 변수인 정적 변수가 있긴 합니다. 그리고 무엇보다 중요한 것은 클래스에 대한 참조 변수는 말 그대로 참조일 뿐 대상 인스턴스의 생존 여부와 무관합니다. 모두 다 GC가 알아서 처리하기 때문입니다. 지역 변수인 클래스 참조자가 사라진다 해서 대상 인스턴스까지 사라지는 것은 아닙니다.

그리고 질문 초기에 보이는 write() 메서드는 그 내부에서 동기화를 실시하고 있기 때문에 여러 스레드에서 동시에 write()를 호출하더라도 실제로 호출 할 수 있는 것은 한 스레드로 제한됩니다. 이 때문에 문자열이 서로 뒤섞이지 않은 것입니다. 참고하시기 바랍니다. 😄

안녕하세요, Oracle Cloud Free Tier 가입 과정에서 계속 오류가 발생해 문의드립니다.

0

3

1

node js 설치 시 npm이 계속 안됩니다.

0

10

1

pg사가 있다고 가정하면

0

4

0

중급 1편 학습 방향에 대해 조언 부탁드립니다

0

17

1

To-Do App

0

14

0

강의노트 접속 불가

0

11

1

Kafka Cluster 구성도 질문

0

10

1

26년 1회차 기출 강의

0

34

2

7.5 강의에서 settings.json 붙여 넣기 내용이 영상과 다릅니다

0

48

2

기출문제

0

49

1

정보처리기사 실기 zip

0

42

2

답을언제쯤받아볼수있나요

0

47

2

데이터베이스 노션

0

36

2

수업기간 연장 부탁드립니다.

0

46

2

08_chatServerSelector 코드 중 오류를 발견하여 문의 남깁니다.

0

70

2

"이전 시간 강의 예제코드 실행시 왜 0bytes가 나오는지"에 대한 설명에 대한 질문 남깁니다!

0

58

2

reader.readLine() == null 의미

0

81

2

윈도우 IOCP 가 DMA 랑 다른 개념인가요?

0

95

1

소켓의 본질은 파일이다.

0

85

2

확장자에 대하여.. 문득 깨달은게 맞는지 확인.

0

100

2

게임과 스트림에 대해서 (이해한게 맞는지 확인 질문)

0

95

2

mac 사용자 폴더 생성 경로 변경

1

129

2

createNewFile() 멱등성

0

75

2

잘못 작성

0

102

2