serialization :
多个线程 依次 访问(增删改查)数据结构,这叫做 serialization , 一般用锁来作数据结构的访问权限控制。这种场景比较常用,比较可靠,但是效率较低,当一个线程访问的时候,其他线程都会处于starving状态,这不是 并发 ,虽然是多线程,但是很遗憾确实不是 并发,因为只有一个线程活跃。
串行化的有两大缺点:1)效率低;2)锁会带来一定的不稳定性,比如死锁和优先级翻转就经常出现。
但是有点也是很明显的:设计简单易于理解和维护。
concurrent:
多个线程 同时 访问(不是增删改查都支持,视并发场景而定)数据结构的 个别部分或者全部。这种场景比较高效,多个线程可以同时访问同一个数据结构,但是功能往往会受限,比如只有一个线程写其他线程只读。如果想设计增删改查都能全面支持的数据结构就比较费事,比如无锁结构的数据结构就需要结合 内存模型 、原子操作 乃至 汇编代码 进行设计。这种模型效率极高且不会死锁、活锁、优先级翻转这些锁带来的副作用。