推广 热搜: 广场  Java  Word  app  营业  微信公众号  北京代理记账  商城  代理记账  商标交易 

java实现线程安全的三种方法 list线程怎么变安全的?

   2023-04-27 企业服务招财猫90
核心提示:list线程怎么变安全的?1.所有操作方法同步,保证线程安全。2.(list)同步的代码块还用来包装原列表的操作,实现线程安全。3.阅读和写作的思路是分离的,写作是锁定的,阅读是解锁的。写的时候锁(使

list线程怎么变安全的?

1.所有操作方法同步,保证线程安全。

2.(list)同步的代码块还用来包装原列表的操作,实现线程安全。

3.阅读和写作的思路是分离的,写作是锁定的,阅读是解锁的。写的时候锁(使用lock),复制原数组(并且数组长度为1,将数组的最后一个元素赋值为要添加的元素),然后更新数组的引用,解锁。

static和Volatile的区别?

变量放在主存区,每个使用该变量的线程都会从主存区拷贝一份到自己的工作区进行操作。

Volatile,说明这个字段是可变的(可能被多个线程使用),Java内存模型负责保持每个线程的工作区中这个字段的值与主存区同步,也就是一致性。

Static,说明这个字段是静态的(可能被多个实例共享),这个类的所有实例的字段在主存区都是同一个变量,也就是唯一性。

Volatile,声明变量值的一致性;静态的,声明变量的唯一性。

另外,volatile同步机制不同于synchronized,前者是内存同步,后者不仅包括内存同步(一致性),还保证线程互斥(互斥)。

Static只声明变量在主存中的唯一性,不能保证工作区和主存变量值的一致性;除非变量的值是不可变的,也就是用final这个修饰符,否则static声明的变量不是线程安全的。

以下摘自Java语言规范的官方解释:

1)如果一个字段被声明为静态的,那么无论最终创建了多少个(可能是零个)类实例,该字段都只存在一个实例。

2)一个字段可能被声明为volatile,在这种情况下,Java内存模型确保所有线程都看到该变量的一致值。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
合作伙伴
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  冀ICP备2023006999号-8