当前位置: 首页 > news >正文

什么是线程安全性

为什么80%的码农都做不了架构师?>>>   hot3.png

在线程安全性的定义中,最核心的概念就是正确性。当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。也就是,当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

我们来看一个示例:一个基于Servlet的因数分解服务,同时确保它的线程安全性。

@ThreadSafe
public class StatelessFactorizer implements Servlet{
    public void service(ServletRequest req,ServletResponse resp){
        BigInteger i = extractFromRequest(req);
        BigInteger[] factors = factor(i);
        encodeIntoResponse(resp,factors);
    }
}

与大多数Servlet相同,StatelessFactorizer是无状态的:它既不包含任何域,也不包含任何对其他类中域的引用。计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问。访问StatelessFactorizer对象的线程不会影响另一个访问同一个StatelessFactorizer对象的线程的计算结果,因为这两个线程并没有共享状态,就好像它们都在访问不同的实例。由于线程访问无状态对象的行为并不会影响其他线程中操作的正确性,因此无状态对象是线程安全的。注:无状态对象一定是线程安全的

转载于:https://my.oschina.net/fhd/blog/223037

相关文章:

  • 网络边界---安全防护思想的演进
  • windows 如何查看端口占用情况?
  • 精妙的SQL语句
  • 谷歌jquery开发地址引用
  • 技术算几斤几两又值几个钱?
  • 轻量级实用JQuery表单验证插件:validateForm5
  • SCJP啊!
  • System Center 2012 R2实例1—构建自服务私有云5—SCO Runbook
  • Javascript按比例压缩图片,解决onload无法读取图片的高度和宽度问题
  • GTS 学习心得
  • Backup--还原选项之STANDBY
  • Oracle触发器详细介绍
  • 日语能力考试N2级核心词汇必备—副词
  • servlet与Struts action线程安全问题分析!
  • 数组MARSHALLING z
  • 【剑指offer】让抽象问题具体化
  • Android开源项目规范总结
  •  D - 粉碎叛乱F - 其他起义
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 内存分配及垃圾回收机制初探
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • redis学习笔记(三):列表、集合、有序集合
  • Vue UI框架库开发介绍
  • 创建一个Struts2项目maven 方式
  • 给初学者:JavaScript 中数组操作注意点
  • 解析 Webpack中import、require、按需加载的执行过程
  • 使用SAX解析XML
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • puppet连载22:define用法
  • ​ArcGIS Pro 如何批量删除字段
  • ​批处理文件中的errorlevel用法
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • $GOPATH/go.mod exists but should not goland
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C语言)字符分类函数
  • (七)c52学习之旅-中断
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十五)使用Nexus创建Maven私服
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 回调、接口回调、 委托
  • .NET 中创建支持集合初始化器的类型
  • .net6 webapi log4net完整配置使用流程
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET运行机制
  • @property括号内属性讲解
  • [04]Web前端进阶—JS伪数组
  • [51nod1610]路径计数
  • [C#] 我的log4net使用手册