写点什么

Java 容器学习二

用户头像
风翱
关注
发布于: 29 分钟前

Java 容器


LinkedHashMap

基本特点:继承自 HashMap,对 Entry 集合添加了一个双向链表。

用途:保证有序,特别是 Java8 stream 操作的 toMap 时使用。

原理:同 LinkedList,包括插入顺序和访问顺序。


安全问题:

1、写冲突。

2、读写问题,可能会死循环。


ConcurrentHashMap-Java7 分段锁

分段锁

默认 16 个 Segment,降低锁粒度。

concurrentLevel = 16


原理有点类似数据库中的分库分表。


ConcurrentHashMap-Java8

Java 7 为实现并行访问,引入了 Segment 这一结构,实现了分段锁,理论上最大并发度与 Segment 个数相等。


Java 8 为进一步提高并发性,摒弃了分段锁的方案,而是直接使用一个大的数组。


线程安全操作利器 - ThreadLocal

• 线程本地变量

• 场景: 每个线程一个副本

• 不改方法签名静默传参

• 及时进行清理


伪并发问题

- 跟并发冲突问题类似的场景很多

- 比如浏览器端,表单的重复提交问题

-- 1、客户端控制(调用方),点击后按钮不可用,跳转到其他页

-- 2、服务器端控制(处理端),给每个表单生成一个编号,提交时判断重复


分布式下的锁和计数器

- 分布式环境下,多个机器的操作,超出了线程的协作机制,一定是并行的

- 例如某个任务只能由一个应用处理,部署了多个机器,怎么控制

- 例如针对用户的限流是每分钟 60 次计数,API 服务器有 3 台,用户可能随机访问到任何一台,怎

么控制?(秒杀场景是不是很像?库存固定且有限。)


发布于: 29 分钟前阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Java容器学习二