새로운 객체가 생성될 때마다 그 객체 내부의 지도는 해당 객체 자체의 소유이므로 안전합니다.
하위 스레드를 호출하는 메인 스레드에서 공용 멤버(변수)를 선언하고 하위 스레드 내부에서 공용 변수를 작동하거나 공용 변수를 참조로 전달하지 않는 한 이 문장은 정확합니다. 스레드 불안전 문제의 출현에 대해 맵 유형 자체가 스레드로부터 안전한지 여부도 잊어버렸습니다. (맵이 인터페이스라는 것을 기억합니다. 스레드로부터 안전한지 여부는 이에 따라 다릅니다. 그의 특정 구현에 대해서는) , Baidu에서 검색하실 수 있습니다. . .
맵 구현 자체가 스레드로부터 안전하다면 다중 스레드 내에서 어떻게 작동하더라도 괜찮을 것입니다. (메인 스레드에서 선언하고 하위 스레드를 참조하여 전달하는 경우에도)
구체적인 실 안전 과학 지식은 제가 이전에 쓴 글을 읽어보실 수 있습니다 https://zhuanlan.zhihu.com/p/...
스레드 안전성이 다중 스레드에서 사용되는지 여부와 관련이 있는지
private
을 정의했지만 다른 스레드에서 간접적으로 접근할 수 있는 방법이 많기 때문에 다중 스레드에서 사용하는 것은 가능하지만 코드에 추가된 동기화 처리가 없으므로 안전하지 않습니다.보충제
Thread와 Runnable을 사용하는 것에는 차이가 없습니다.
으아악케이스 없이 실행되는 예제(찾으려면 여러번 실행해야 함)
으아악하위 스레드를 호출하는 메인 스레드에서 공용 멤버(변수)를 선언하고 하위 스레드 내부에서 공용 변수를 작동하거나 공용 변수를 참조로 전달하지 않는 한 이 문장은 정확합니다. 스레드 불안전 문제의 출현에 대해 맵 유형 자체가 스레드로부터 안전한지 여부도 잊어버렸습니다. (맵이 인터페이스라는 것을 기억합니다. 스레드로부터 안전한지 여부는 이에 따라 다릅니다. 그의 특정 구현에 대해서는) , Baidu에서 검색하실 수 있습니다. . .
맵 구현 자체가 스레드로부터 안전하다면 다중 스레드 내에서 어떻게 작동하더라도 괜찮을 것입니다. (메인 스레드에서 선언하고 하위 스레드를 참조하여 전달하는 경우에도)
구체적인 실 안전 과학 지식은 제가 이전에 쓴 글을 읽어보실 수 있습니다 https://zhuanlan.zhihu.com/p/...
말하자면
여행 가방에 돈을 넣고 혼자 길을 걷는다.
당연히 안전하다고 생각하시겠죠.
하지만 한번 도둑맞으면 안전하지 않습니다. . .
스레드 안전성은 서로 다른 스레드가 동일한 데이터에 액세스한다는 것을 의미합니다. 스레드가 하나만 있으면 스레드 안전성이 없습니다. 또는 "안전"하다고 이해할 수도 있습니다. 결국 다른 개체는 이에 액세스할 수 없지만 "스레드 안전"은 아닙니다.
질문에 답하세요:
예, 스레드가 안전하지 않습니다.
여기의 각 Thread 개체에는 고유하고 독립적인 Map 개체가 있지만 "스레드 안전 기능"이 없기 때문입니다.
글쎄요, 제가 이해한 내용은 좀 장황한 것 같습니다. . . ==
초대해주셔서 감사합니다!
는 이 의 사용을
new MyThread().start()
으로 제한할 때线程安全
입니다.비공개로 선언하더라도 변수는 다른 스레드에서 계속 읽을 수 있습니다. 동기화 잠금이 없으면 스레드가 안전하지 않습니다.
으아아아읽는 것은 괜찮지만, 쓰면 스레드 안전 문제가 발생할 수 있습니다. . .
1. 스레드로부터 안전한 클래스 메서드를 사용하세요
2. ThreadLocal을 사용하세요
MyThread
를 클래스라고 생각하고(스레드 클래스라고 생각하지 마세요)obj
를 이 클래스의 멤버라고 생각하세요. 그러면 이해가 더 쉬워집니다.멀티스레딩의 경우
으아악주로 특정 공개 리소스에 액세스했는지 여부에 따라 다릅니다. 이 질문은 특정 공개 리소스에 액세스하는 것과 관련이 없으므로 안전하거나 안전하지 않다고 말할 수 없습니다.
주로 이 변수에 대해 작업을 수행했는지 여부에 따라 달라지며, 매번 새 객체를 생성한다고 가정하면 스레드로부터 안전합니다.