Java并发编程实践笔记之—线程封闭(Thread Confinement)

什么是线程封闭
  • 仅在单线程内访问数据,就不需要同步(可理解成“将对象封闭在线程中”)
  • 是实现线程安全性的最简单的方式之一
  • 应用1——Swing中大量使用了线程封闭技术。Swing的可视化组件和数据模型对象都不是线程安全的,Swing通过将它们封闭到Swing的事件分发线程中来实现线程安全性。Swing应用程序的许多并发错误就是由于错误地在另一个线程中使用了这些被封闭的对象
  • 应用2——JDBCConnection对象不是线程安全的,服务器应用程序中,大多数请求由单个线程采用同步的方式来出来一个Connection对象,在Connection返回连接池之前,连接池不会将它分配给其他线程(注意,连接池是要线程安全的,因为连接池是有多个线程同时访问的)
  • Java及其核心库提供了一些机制来帮助维持线程的封闭性
Ad-hoc线程封闭
  • 非常脆弱,比较少用
栈封闭
  • 概念:局部变量的固有属性之一就是始终封闭在线程中,它们位于执行线程的栈中,其他线程就无法访问这个栈
  • 对于基本类型的局部变量,Java语言确保了无论如何都不会破坏封闭性
  • 对于对象引用的局部变量,程序员要注意以确保被引用的对象不会逸出
ThreadLocal
  • 更规范的方法,使线程中的某个值与保存值的对象关联起来
  • 提供了get/set等方法,为每个使用该变量的线程都存有一份独立的副本
  • 如果你需要将一个单线程应用程序移植到多线程环境中,通过将共享的全局变量转换为ThreadLocal对象,就可以维持线程的安全性
  • 避免滥用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值