关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考

我的难点

sychronizedList方法无法解决List遍历时线程不安全问题

关于慕课网的socket课程学习中,qiujuer老师在课程中讲到:
关于多线程操作时,利用sychronizedList方法解决List内部方法线程不安全问题,但是对于list遍历仍然会触发异常。难点*1为什么会触发异常呢?

sychronizd同步块为什么可以解决List遍历时线程不安全问题

接着老师又讲到其他解决方案,
在stop()方法内部添加synchronized同步块。stop()方法中用到了List的遍历操作。
然后在boradcast(String str)方法名上添加sychronized修饰。方法内部用到了List的遍历操作。难点*2为什么同步块可以解决List遍历时线程不安全问题呢?

我的思考过程

难点*1:为什么会触发异常呢?
【思路】先看看sychronizedList(List list)是一个什么方法。
点开源码看看:这个方法支持特定的List返回一个线程安全的List。
【源码结论】:对于synchronizedList方法返回的List ,对该返回的List进行遍历时,必须放在同步块内部。否则可能导致非确定性(non-deterministic)问题。

待考证*1为什么线程安全的一个List,在进行遍历操作时会触发线程不安全?

【我的思考】:
非确定性(non-deterministic)问题指什么问题?它和线程不安全有什么关系呢?什么是线程不安全呢?
【我的理解】:

  1. 非确定性问题指无法直接计算,只能间接“猜算”结果的一类问题。
  2. 非确定性问题中可能会有线程不安全的问题出现。
  3. 线程不安全指:在多线程情况下,数据被先后更改多次导致脏数据。

【我的思考】:
源码讲到synchronizedList方法返回的List进行遍历操作时会有非确定问题,没有讲到线程不安全的问题。
【进一步思考】:
但是,源码建议这部分遍历要放到同步块中,说明synchronized同步块可以解决这部分的非确定问题,这部分问题主要是指线程不安全问题吗?同步块可以解决线程不安全问题吗?
【我的理解】:

  1. 这里的非确定问题主要指的是synchronizedList方法返回的List在遍历时导致线程不安全问题,因为必须使用同步块来解决这部分问题。
  2. 推测此处同步块可以解决线程不安全问题。

【我的思考】:
synchronizedList方法返回的List就是一个线程安全的list,所以遍历这个list会破坏了这个返回的list的的线程安全吗?
【我的理解】:

  1. 源码讲到返回的list在遍历时会出现非确定性问题,必须加上同步块。所以要看看使用同步块解决了什么问题。

难点*2为什么同步块可以解决List遍历时线程不安全问题呢?

思考:为什么遍历时线程会不安全呢?
未完待续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值