java-se - JAVA中多线程使用线程不安全的容器会出现什么情况?
高洛峰
高洛峰 2017-04-17 17:34:29
0
3
674

比如StringBuilder在多线程中使用会导致线程不安全,这个不安全会产生什么后果,是数据不正确或丢失.?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(3)
Peter_Zhu

먼저 코드를 드리겠습니다. 직접 실행해 보시기 바랍니다.

으아악

위 코드에서는 스레드로부터 안전하지 않은 ArrayList가 메인 스레드에 새로 추가되고, 이 ArrayList에 요소를 각각 추가하기 위해 1000개의 스레드가 열립니다. 모든 스레드가 완료된 후 이 What입니다. ArrayList의 크기여야 합니까? 100,000이어야합니까?

단, 실제 실행 결과는 100000이 아닐 수도 있습니다! 결과는 99946, 99955...일 수 있습니다. 이것이 다중 스레드 작업의 경우 스레드로부터 안전하지 않은 컬렉션이 잘못된 결과를 초래하는 이유입니다.

특정 스레드 안전에 대해서는 제가 작성한 블로그인 http://xxgblog.com/2013/05/16/java-threa...를 참조하세요.

Peter_Zhu

이로 인해 데이터 불일치가 발생하고 얻은 데이터가 부정확할 수 있습니다. 그 영향은 전적으로 비즈니스 로직에 따라 결정됩니다.

左手右手慢动作

예를 들어 스레드 A가 목록을 순회하고 있습니다

으아악

순회 프로세스 중에 스레드 B가 와서 목록에서 요소를 삭제합니다. 그런 다음 스레드 A는 순회가 끝나면 IndexOutOfBoundsException이 표시됩니다. 왜냐하면 실제 요소 수가 최대 1개가 되었기 때문입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!