聊聊高并发(二)结合实例说说线程封闭和背后的设计思想

本文探讨了高并发场景下多线程的问题,重点关注线程安全和线程封闭策略。线程封闭包括栈封闭、ThreadLocal和程序控制线程封闭。栈封闭利用局部变量实现线程安全;ThreadLocal通过为每个线程提供独立的对象副本避免线程安全问题,但可能造成内存浪费;程序控制线程封闭设计思路是将用户状态相关的代码限制在单一线程中,如Netty的EventLoop。文章还讨论了线程池和任务队列在处理高并发时的权衡,包括任务队列的边界和任务拆分策略。
摘要由CSDN通过智能技术生成

高并发问题抛去架构层面的问题,落实到代码层面就是多线程的问题。多线程的问题主要是线程安全的问题(其他还有活跃性问题,性能问题等)。

那什么是线程安全?下面这个定义来自《Java并发编程实战》,这本书强烈推荐,是几个Java语言的作者合写的,都是并发编程方面的大神。

线程安全指的是:当多个线程访问某个类时,这个类始终都能表现出正确的行为。

正确指的是“所见即所知”,程序执行的结果和你所预想的结果一致。


理解线程安全的概念很重要,所谓线程安全问题,就是处理对象状态的问题。如果要处理的对象是无状态的(不变性),或者可以避免多个线程共享的(线程封闭),那么我们可以放心,这个对象可能是线程安全的。当无法避免,必须要共享这个对象状态给多线程访问时,这时候才用到线程同步的一系列技术。


这个理解放大到架构层面,我们来设计业务层代码时,业务层最好做到无状态,这样就业务层就具备了可伸缩性,可以通过横向扩展平滑应对高并发。


所以我们处理线程安全可以有几个层次:

1. 能否做成无状态的不变对象。无状态是最安全的。

2. 能否线程封闭

3. 采用何种同步技术


我理解为能够“逃避”多线程问题,能逃则逃,实在不行了再来处理。


了解了线程封闭的背景,来说说线程封闭的具体技术和思路

1. 栈封闭

2. ThreadLocal

3. 程序控

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值