保障线程安全的设计技术

1、Java运行时存储空间

1、堆空间(Heap)
  • 可以被多个线程共享
  • 存储对象,Java虚拟机启动时分配的一段可以动态扩容的内存空间
  • 存储类的实例
  • 垃圾回收器的工作场所
  • 进一步划分:年轻代、年老代
2、栈空间(Stack)
  • 线程的私有空间
  • 线程创建时分配的固定大小的内存空间
  • 局部变量的变量值存储在栈空间,基础类型变量和引用类型变量的变量值直接存储在栈帧空间
3、非堆空间(Non-Heap)
  • 可以被多个线程共享
  • 存储常量以及类的元数据,Java虚拟机启动时分配的一段可以动态扩容的内存空间
  • 类的元数据包括:类的静态变量、类的方法、方法的元数据(名称、参数、返回值)

2、无状态对象

  • 定义:一个类的同一个实例被多个线程共享并不会使这些线程存在共享状态,那这个类及其任意一个实例称为无状态对象
  • 无状态对象不含任何实例变量,且不包含任何静态变量或者其包含的静态变量都是只读的常量
  • 固有的线程安全性

3、并发集合

1、并发集合对象自身支持对其进行线程安全的遍历操作
2、两种遍历方式
  • 快照
    在Iterator实例被创建的那一刻待遍历对象内部结构的一个只读副本
    优点:遍历和更新操作互不影响
    缺点:当集合大时创建快照的开销大
  • 准实时
    不是针对副本进行遍历,但也不借助锁保障线程安全,从而使遍历可以并发进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值