线程封闭的概念

访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭。

实现线程封闭的方法

1:ad-hoc线程封闭

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

2:栈封闭

栈封闭是我们编程当中遇到的最多的线程封闭。什么是栈封闭呢?简单的说就是局部变量。多个线程访问一个方法,此方法中的
局部变量都会被拷贝一分儿到线程栈中。所以局部变量是不被多个线程所共享的,也就不会出现并发问题。所以能用局部变量就别用全局的变量,全局变量容易引起并发问题。

3:ThreadLocal封闭

使用ThreadLocal是实现线程封闭的最好方法,有兴趣的朋友可以研究一下ThreadLocal的源码,其实我们可以理解ThreadLocal内部维护了一个Map,Map的key是每个线程的名称,而Map的值就是我们要封闭的对象。每个线程中的对象都对应着Map中一个值,也就是ThreadLocal利用Map实现了对象的线程封闭。
推荐博客:
https://www.cnblogs.com/digdeep/p/4510875.html

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

Java多线程之线程封闭(三)相关推荐

  1. Java多线程02(线程安全、线程同步、等待唤醒机制)

    Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...

  2. Java多线程:线程安全和非线程安全的集合对象

    转载自  Java多线程:线程安全和非线程安全的集合对象 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到 ...

  3. 初学Java多线程:线程简介

     Java多线程初学者指南系列教程http://developer.51cto.com/art/200911/162925.htm 初学Java多线程:线程简介 2009-06-29 17:49 ...

  4. java多线程之线程池简介

    前言 池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池.池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性.本篇主要是和大家一起分析下线程池的架构和它的工作流程. ...

  5. java多线程及线程池使用

    Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...

  6. Java多线程与线程并发库高级应用笔记

    以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌 张孝祥_Java多线程与并发库高级应用 [视频介 ...

  7. Java多线程之线程同步机制(锁,线程池等等)

    Java多线程之线程同步机制 一.概念 1.并发 2.起因 3.缺点 二.三大不安全案例 1.样例一(模拟买票场景) 2.样例二(模拟取钱场景) 3.样例三(模拟集合) 三.同步方法及同步块 1.同步 ...

  8. Java 创建一个线程的三种方式

    Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...

  9. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

最新文章

  1. c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...
  2. [Android] 按钮单击事件的五种写法
  3. pe估值 python_Python编程学习笔记(8)
  4. React是什么及特点
  5. JEPaas代码———出库数量,添加明细, 确认出库
  6. Golang GOPATH 包
  7. sql server 自定义函数
  8. matlab时频分析工具箱安装,Matlab emd工具箱、时频分析工具箱下载以及安装方法...
  9. ​手机APP应用软件开发
  10. 测试人员的工作及介绍
  11. 新西兰 计算机 转专业,新西兰留学后如何转学转专业?
  12. OpenSSL下载安装
  13. php api开发书籍,概述 · ThinkPHP API开发入门 · 看云
  14. 神奇的二进制转换和运算
  15. Lenb函数计算中文字节出错处理办法
  16. 量化金融分析AQF(1):股票概述
  17. CF1633D Make Them Equal 题解
  18. 思科无线认证服务器,思科服务器认证配置
  19. 厄尔米特矩阵特征值为实数证明
  20. LeetCode-518零钱兑换II-中等

热门文章

  1. 缓冲区溢出漏洞攻击——Shellcode编写
  2. Delphi中String与PAnsiChar转换
  3. 【Boost】boost库中的小工具enable_shared_from_this
  4. CrashFinder,找到崩溃代码行
  5. 【项目介绍】协程——C语言实现的用户态非抢占式轻量级线程
  6. 抖音直播间弹幕protocbuf分析
  7. 【送书福利8本】YYDS《剑指Offer》,百万程序员人手一册
  8. JAVA通信编程(四)——UDP通讯
  9. shell编程之循环语句
  10. Zoom计划于4月IPO