集合的同步与非同步

Posted nineberg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合的同步与非同步相关的知识,希望对你有一定的参考价值。

Java的集合中都说ArrayList 非同步、LinkedList 非同步、Vector 同步 、Stack 同步,线程安不安全,那么这里所说的同步,和线程安全是什么呢?

在这里的非同步指的是,当使用线程和web的时候,对于这个集合对象进行操作,那么不同的线程,和不同的web客户端所获取的这个集合对象是不同的.所以是说不同步,且不在同一个线程,多线程的形式,是不安全的.

?

比如说现在 线程A 和 线程B, 要拿到这个集合对象, 现在集合对象有[1,2,3].那么A在集合对象里添加了一下数字[1,2,3,4,5].那么这个时候B线程所取拿这个集合对象的时候,还是[1,2,3]而不是A已经修改好的集合[1,2,3,4,5].所以说这里的集合不同步,线程不安全.

?
?

什么是线程安全问题?

?

线程安全,其实指的就是内存的安全. 目前主流操作系统都是多任务多线程同时进行的.为了保证安全,每个进程只能访问分配额给自己的内存空间,而不能访问别的进程,这是由操作系统保障的.

在每个进程的内存空间中都会有一块特殊的公共区域,通常称为 堆区(内存).进程内所有的线程都可以访问到该区域,这就是造成线程安全问题的潜在原因.

所以, 线程安全 指的是,在堆区内存的数据由于可以被任何线程访问到,没有限制的情况下存在被意外修改的风险.

?

以上是关于集合的同步与非同步的主要内容,如果未能解决你的问题,请参考以下文章

哪些Java集合是同步的(线程安全),哪些不是?

有啥理由用同步集合初始化实体属性?

Synchronized vs Concurrent Collections(并发集合VS同步集合)

Synchronized vs Concurrent Collections(并发集合VS同步集合)

Java多线程与并发库高级应用-同步集合

[Java 并发编程实战] 集合框架之 同步容器类 & 并发容器类