博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA并发编程实战---第三章:对象的共享(2)
阅读量:6251 次
发布时间:2019-06-22

本文共 807 字,大约阅读时间需要 2 分钟。

线程封闭

  如果仅仅在单线程内访问数据,就不需要同步,这种技术被称为线程封闭,它是实现线程安全性的最简单的方式之一。当某个对象封闭在一个线程中时,这种方法将自动实现线程安全性,即使被封闭的对象本生不是线程安全的。

  实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发。避免并发最简单的方法就是线程封闭。什么是线程封闭呢?

  就是把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。实现线程封闭有哪些方法呢?

1:ad-hoc线程封闭

  这是完全靠实现者控制的线程封闭,他的线程封闭完全靠实现者实现。也是最糟糕的一种线程封闭。所以我们直接把他忽略掉吧。

2:栈封闭

  栈封闭是我们编程当中遇到的最多的线程封闭。什么是栈封闭呢?简单的说就是局部变量。多个线程访问一个方法,此方法中的局部变量都会被拷贝一分儿到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。局部变量的固有属性之一就是封闭在执行线程中。它们位于执行线程栈中,其它线程无法访问这个线程栈。栈封闭也被称为线程内部使用或线程局部使用。

3:ThreadLocal封闭

      使用ThreadLocal是实现线程封闭的最好方法,有兴趣的朋友可以研究一下ThreadLocal的源码,其实ThreadLocal内部维护了一 个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是ThreadLocal 利用Map实现了对象的线程封闭。

  总之,当我们要用线程封闭来避免并发问题的时候,最好使用的就是 【栈封闭】 和 【ThreadLocal】。

转载于:https://www.cnblogs.com/wxgblogs/p/5463419.html

你可能感兴趣的文章
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
Mars说光场(3)— 光场采集
查看>>
Django 文件下载功能
查看>>
xBIM 插入复制功能
查看>>
AI技术出海 - 阿里云GPU服务器助力旷视勇夺4项世界第一
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
HTML DOM 之 DOM对象:Document Object Model (文档对象模型)
查看>>
centos 6.5安装vncserver 并开启远程桌面
查看>>
在RHEL上配置epel的yum源及其他开源YUM源
查看>>
qt 学习之路2
查看>>
刘启成_补充知识:awk:报告生成器
查看>>
ASP.NET 使用List<T>.Remove 不生效
查看>>
TCP有限状态机
查看>>
XenServer常用Debug问题的命令介绍
查看>>
算法分析-快速排序QUICK-SORT
查看>>
Web服务基础六之编译安装配置RHEL+Apache+MySQL+PHP+ZendOptimize
查看>>
通过bat文件运行jar包程序
查看>>
关于hive RegexSerDe的源码分析
查看>>
OpenCart之侧边浮动联系我们表单(Side Contact Us Form)
查看>>