`

栈封闭

    博客分类:
  • java
 
阅读更多

栈封闭(局部变量)

栈限制是线程封闭的一种特例,只能通过局部变量才可以访问对象,局部使对象限制在执行线程中,存在于执行线程栈,其他线程无法访问这个栈,从而确保线程安全。(每一个线程都有一个工作内存,工作内存中班包括有栈,局部的基本类型变量是处于栈中,引用类型的引用处于栈中,而引用指向的对象处于堆中)。 
栈限制的例子如下:

 

要理解栈封闭,需要先了解多线程之间有哪些共享的数据,有哪些不共享的数据

 

**多线程的数据共享机制

同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?
共享的资源有
a. 堆  由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
d. 文件等公用资源  这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
独享的资源有
a. 栈 栈是独享的
b. 寄存器  这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC

             

  

因此,TreeSet对象的引用保存在annimal变量中,

   annimal又是一个局部变量

   局部变量保存在栈上

   每个线程独享栈

   因此,不同线程的栈不同,不同线程就无法操作同时操作同一个TreeSet对象,因此保证了安全性

  • 大小: 7.9 KB
分享到:
评论

相关推荐

    java线程封闭之栈封闭和ThreadLocal

    主要介绍了java线程封闭之栈封闭和ThreadLocal,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java多线程安全性基础介绍.pptx

    栈封闭 局部变量 threadLocal 为每个线程保存一个副本 类似于一个以线程id为key的map 不可变对象状态 final 关键共享资源上互斥,变并发为串行即同步 锁 分类 显示锁 Lock Lock是个接口 实现类 ...

    Java并发编程实战

    3.3.2 栈封闭 3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2 不可变对象与初始化安全性 3.5.3 ...

    Java 并发编程实战

    3.3.2 栈封闭 3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2 不可变对象与初始化安全性 3.5.3 ...

    Java并发编程(学习笔记).xmind

    栈封闭 ThreadLocal类 只读共享:不变对象一定是线程安全的 尽量将域声明为final类型,除非它们必须是可变的 分类 不可变对象 事实不可变对象 线程安全共享 封装有助于管理...

    栈和队列.rar

    栈队列,两个栈实现队列,两个队列实现栈,栈和队列的一些简单应用

    栈和队列数据结构实现和应用源码.zip

    2、某单位停车场共有 10 个车位,是一个一端封闭的只有一排的狭长通道, 车辆只能由左向右依次停放,最右端有一个大门供车辆出入。当车位未满时,车 辆可以进入并停在最后一辆车的后面;当车位已满时,车辆需在大门...

    用栈实现任意封闭图形区域的填充 (2000年)

    讨论了用栈实现封闭图形区域填充的算法,并给出用C语言实现算法的程序.

    毕业设计基于springBoot的停车收费管理系统源码+数据库+使用文档,支持封闭车场和路边车场,支持微信支付宝多种支付渠道

    基于springBoot的停车收费管理系统源码+数据库+使用文档,支持封闭车场和路边车场,支持微信支付宝多种支付渠道 技术栈 Springboot,Mybatis Plus,Beetl,Mysql,Redis,RabbitMQ 本项目代码经过严格调试,确保可以运行...

    约瑟夫环c语言的实现

    通过链表建立一个封闭的环,从第一个人开始报数,找到第k个后,从第k个人开始向后数s个,第s个人出列,直到最后一个人

    基于微服务架构的云平台总体设计

    正好这段时间我们在封闭研发我们的新一代数字化云平台(theplatform),借此机会和大家分享一下我们的总体设计及思路:theplatform是一款基于微服务架构的DevOps容器云平台,设计主体分成了三个步骤: 1.看问题:...

    扫描线种子填充算法

    实现封闭区域的沿水平扫描线段的种子填充 安装配置GLUT库: OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。 将压缩包...

    C++数据结构停车场管理.doc

    数据结构实验报告 实验题目: 停车场管理 学生姓名: 班 级: 学 号: 问题描述 设有一个停车场,它是利用一个南北向的狭窄通道建成,北端封闭,大门在最南端。 最先到达的汽车停放在最北端,后面到达的汽车从北至南...

    Android图像处理之泛洪填充算法

    算法的原理很简单,就是从一个点开始附近像素点,填充成新的颜色,直到封闭区域内的所有像素点都被填充新颜色为止。泛红填充实现最常见有四邻域像素填充法,八邻域像素填充法,基于扫描线的像素填充方法。根据实现又...

    基于springBoot智慧停车收费管理系统JAVA源码

    一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。开源版本适合学习,做毕业设计使用,只是后台管理系统,不包含...

    自动机理论、语言和计算导引

    虽然不是入门教材,但...辨别是否P=NP时我们能力的限度 14、1辅助下推自动机 第十四章 其它重要语言类集锦 14、2栈自动机 14、3加标语言 14、4发展系统 14、5小结 参考文献 汉英名词索引

    ACM常用代码

    数学问题: 1.精度计算——大数阶 乘 2.精度计算——乘法 (大数乘小数) 3.精度计算——乘法 (大数乘大数) 4....5.精度计算——减法 6.任意进制转换 7....倍数 8....分 11....顺序栈 3.链表 4.链栈 5.二叉树

    基于FF现场总线的PID控制算法应用研究

    我国在FF总线技术研究以及符合FF协议的现场设备产品开发方面己经取得了长足的进步,如中科院沈阳自动化研究所研制出了各种基金会现场总线产品,例如压力变送器、温度变送器,以及主机接口卡和通信栈软件等。...

    acm常用代码及算法

    判断一个封闭图形是凹集还是凸集 12.Graham扫描法寻找凸包 数论: 1.x的二进制长度 2.返回x的二进制表示中从低到高的第i位 3.模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数...

Global site tag (gtag.js) - Google Analytics