java实现线程安全的三种方法 list线程怎么变安全的?
浏览量:4072
时间:2023-04-03 22:18:11
作者:采采
list线程怎么变安全的?
1.所有操作方法同步,保证线程安全。
2.(list)同步的代码块还用来包装原列表的操作,实现线程安全。
3.阅读和写作的思路是分离的,写作是锁定的,阅读是解锁的。写的时候锁(使用lock),复制原数组(并且数组长度为1,将数组的最后一个元素赋值为要添加的元素),然后更新数组的引用,解锁。
static和Volatile的区别?
变量放在主存区,每个使用该变量的线程都会从主存区拷贝一份到自己的工作区进行操作。
Volatile,说明这个字段是可变的(可能被多个线程使用),Java内存模型负责保持每个线程的工作区中这个字段的值与主存区同步,也就是一致性。
Static,说明这个字段是静态的(可能被多个实例共享),这个类的所有实例的字段在主存区都是同一个变量,也就是唯一性。
Volatile,声明变量值的一致性;静态的,声明变量的唯一性。
另外,volatile同步机制不同于synchronized,前者是内存同步,后者不仅包括内存同步(一致性),还保证线程互斥(互斥)。
Static只声明变量在主存中的唯一性,不能保证工作区和主存变量值的一致性;除非变量的值是不可变的,也就是用final这个修饰符,否则static声明的变量不是线程安全的。
以下摘自Java语言规范的官方解释:
1)如果一个字段被声明为静态的,那么无论最终创建了多少个(可能是零个)类实例,该字段都只存在一个实例。
2)一个字段可能被声明为volatile,在这种情况下,Java内存模型确保所有线程都看到该变量的一致值。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。