정적 메서드 (속성, 필드 또는 다른 요소 없음) 만있는 정적 클래스가 있고 해당 메서드에 동시에 액세스하는 여러 스레드가있는 데 문제가있을 수 있습니까?정적 메서드 및 멀티 스레딩
1
A
답변
0
예, 가능합니다. 그것은 당신의 방법이 어떻게 쓰여지 느냐에 달려 있습니다. 정적 메소드 만 있다면, 이론적으로는 완전히 재진입 코드를 의미 할 것입니다.
5
공유 상태가없는 경우 또는 외부 리소스이면 아무런 위험이 없습니다. 당신은 "no fields"등을 언급했는데, 간접적으로 말하는 공유 상태가 아닌 한 (이 시나리오에서는 스레드로부터 안전하지 않은 일반적인 인수를 통해 또는 일부 을 통해 지저분한 방식으로 상태를 공유하는 유틸리티 메소드), 괜찮을 것입니다.
0
잠재적으로 가능합니다.
는 상상 :
class Logger
{
WriteToLogs(string msg)
{
// Write data to file1
...
// Write data to file2
...
}
}
지금 여러 스레드()를 동시에 WriteToLog를 호출하는 시도가 상상한다. thread1이 로그 파일에 기록하기 전에 thread2가 예약되면 어떻게됩니까? 이 경우 모든 유형의 데이터 손상으로 끝날 수 있습니다.
정적 클래스와 메소드는 본질적으로 모든 유형의 스레드 동기화, 잠금 등을 제공하지 않습니다. 이는 설계하고 구현하기위한 것입니다.
0
그렇습니다. 예를 들어 싱글 톤 구현은 정적 일 수 있지만 멀티 스레딩 문제를 방지하려면 double checked locking과 같은 메커니즘을 구현해야합니다.
관련 문제
- 1. 정적 변수와 멀티 스레딩
- 2. 멀티 스레딩 및 멀티 태스킹
- 3. 스프링 및 멀티 스레딩
- 4. NSOpenGLLayer 및 멀티 스레딩
- 5. 멀티 스레딩 시스템에서 정적 변수에 액세스
- 6. 멀티 스레딩
- 7. TCP 멀티 캐스트 및 멀티 스레딩
- 8. dotNet의 잠금 및 멀티 스레딩
- 9. WPF 및 멀티 스레딩 질문
- 10. 멀티 스레딩 및 논리 값은
- 11. 멀티 스레딩 및 위임자 실행
- 12. 스프링, 멀티 스레딩 및 jms
- 13. 정적 및 비 정적 메서드
- 14. iPhone : 멀티 태스킹, 멀티 스레딩?
- 15. 정적 메서드 및 스레드
- 16. 다른 스크립트를 멀티 스레딩
- 17. JavaFX 멀티 스레딩
- 18. iPhone "멀티 스레딩"질문
- 19. WinForms 멀티 스레딩 문제
- 20. 멀티 스레딩 CSLA.NET
- 21. 멀티 스레딩 환경 구현
- 22. 멀티 스레딩 프로그래밍
- 23. 파이썬 멀티 스레딩 동기화
- 24. 멀티 스레딩 문제
- 25. ActionScript 3 - 정적 메서드 및 인스턴스 메서드
- 26. 멀티 스레딩 vs 프로세스
- 27. NXT를 사용한 멀티 스레딩
- 28. Cherrypy 멀티 스레딩 예제
- 29. 멀티 스레딩 함수 호출
- 30. Bash의 멀티 스레딩