JAVA中多线程使用线程不安全的容器会出现什么情况?
比如StringBuilder在多线程中使用会导致线程不安全,这个不安全会产生什么后果,是数据不正确或丢失.?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如StringBuilder在多线程中使用会导致线程不安全,这个不安全会产生什么后果,是数据不正确或丢失.?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
我先给上一段代码,你可以自己运行一下试一试:
上面的代码中,在主线程中new了一个非线程安全的ArrayList,然后开1000个线程分别向这个ArrayList里面添加元素,每个线程添加100个元素,等所有线程执行完成后,这个ArrayList的size应该是多少?应该是100000个?
然而实际运行结果可能不是100000!结果可能会是99946、99955...这就是非线程安全的集合在多线程操作的情况下导致不正确的结果。
具体线程安全这块可以参考我写的一篇博客:http://xxgblog.com/2013/05/16/java-threa...
会导致数据不一致喽,可能拿到的数据不准确不正确,至于造成啥影响全在你业务逻辑的控制了
比方说线程 A 正在遍历一个 List
遍历的过程中,来了个线程 B,把 list 里面删了个元素,那么线程 A 遍历到最后就会出现 IndexOutOfBoundsException,为什么,因为实际的元素的数量已经变成 max - 1 了啊。