永康建设投标网站,怎么做app网站,清远网站建设,全国信息企业查询系统官网目录我的难点sychronizedList方法无法解决List遍历时线程不安全问题sychronizd同步块为什么可以解决List遍历时线程不安全问题我的思考过程我的难点
sychronizedList方法无法解决List遍历时线程不安全问题
关于慕课网的socket课程学习中#xff0c;qiujuer老师在课程中讲到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问题指什么问题它和线程不安全有什么关系呢什么是线程不安全呢 【我的理解】
非确定性问题指无法直接计算只能间接“猜算”结果的一类问题。非确定性问题中可能会有线程不安全的问题出现。线程不安全指在多线程情况下数据被先后更改多次导致脏数据。
【我的思考】 源码讲到synchronizedList方法返回的List进行遍历操作时会有非确定问题没有讲到线程不安全的问题。 【进一步思考】 但是源码建议这部分遍历要放到同步块中说明synchronized同步块可以解决这部分的非确定问题这部分问题主要是指线程不安全问题吗同步块可以解决线程不安全问题吗 【我的理解】
这里的非确定问题主要指的是synchronizedList方法返回的List在遍历时导致线程不安全问题因为必须使用同步块来解决这部分问题。推测此处同步块可以解决线程不安全问题。
【我的思考】 synchronizedList方法返回的List就是一个线程安全的list所以遍历这个list会破坏了这个返回的list的的线程安全吗 【我的理解】
源码讲到返回的list在遍历时会出现非确定性问题必须加上同步块。所以要看看使用同步块解决了什么问题。
难点*2为什么同步块可以解决List遍历时线程不安全问题呢
思考为什么遍历时线程会不安全呢 未完待续。