全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java线程安全基础概念解析

Java线程安全初步了解。JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果。从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他额外的同步控制就可以安全放心的使用对象。

1.线程安全的定义

当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。这个定义很严谨,它要求就线程安全的代码都具备一个特征:代码本身封装了所有必要的正确性保障手段,令调用者无须关心多线程的问题,更无须自己实现热河措施来保证多线程的正确调用。

2.Java语言中的线程安全

为了更深入地理解线程安全,按照线程安全的“安全强度”由强至弱来排序:不可变,绝对线程安全,相对线程安全,线程兼容和线程对立。

2.1 不可变

在jDK1.5以后不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再进行任何的线程安全保障措施,通过final关键字修饰的属性,对象或方法,那其外部的可见状态永远也不会改变。如果共享数据是一个基本数据类型,那么只要在定义时使用final关键字修饰就可以保证它是不可变得。如String类对象,就是一个典型的不可变对象,我们调用substring(),replace(),和concat()这些方法都不会影响它原来的值,只会返回一个新构造的字符串对象。

2.2相对线程安全

相对线程安全就是我们通常意义上所讲的线程安全,它需要保证这个对象单独的操作是线程安全的。在java中大部分线程安全类都属于这种类型,如Vector,HashTable等。

2.3线程兼容

线程兼容是指对象本身并不是线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中安全地使用。

2.3线程对立

线程对立是指不管调用端是否采用了同步措施,都无法在多线程环境中并发使用的代码。由于Java语言天生就具备多线程特性,线程对立这种排斥多线程的代码很少出现。常见的线程对立操作有Thread类的suspend()和resume()方法,System.setIn()等。

3.线程安全的实现方法

3.1互斥同步

互斥同步是最常见的一种并发正确性保障手段,同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条线程使用。而互斥是实现同步的一种手段,临界区,互斥量和信号量都是主要的互斥实现方式。互斥是因,同步是果,互斥是方法,同步是目的。

在Java中,最基本的互斥同步手段就是synchronized关键字。除此之外还可以使用java.util.concurrent包中的重入锁(ReentrantLock)来实现同步。在用法上都很相似,只是代码写法上有点区别,一个表现为API层面的互斥锁(lock()和unlock()方法配合try/finally语句块来完成),一个表现为原生语法层面的互斥锁。不过重入锁比synchronized增加了以下三项:
等待可中断:是指当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步块很有帮助。

可实现公平锁:公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁;而非公平锁则不保证这一点。synchronized中的锁是非公平的,重入锁缺省也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。

锁可以绑定多个条件:是指一个重入锁对象可以同时绑定多个Condition对象,而在synchronized中,锁对象的wait()和notify()或notifyAll()方法可以实现一个隐含条件,如果要和多于一个的条件关联的时候,就不得不额外的添加y一个锁,而重入锁无须这样做,只需要多次调用newCondition()方法即可。

3.2非阻塞同步

互斥同步最重要的问题就是进行线程阻塞和唤醒所带来的性能问题,它属于一种悲观的并发策略,总是认为只要不去做正确的同步措施就会出现问题。但是我们有了另外一个选择:基于冲突检测的乐观并发策略,通俗的说就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享数据发生了争用,产生了冲突,那就再进行其他的补偿措施,这种乐观的并发策略的许多实现都不需要把线程挂起,因此被称为非阻塞同步。

总结

以上就是本文关于Java线程安全基础概念解析的全部内容了,希望对大家有所帮助,也希望大家多多支持。


# java  # 线程安全  # 线程安全的概念  # list  # 详解java各种集合的线程安全  # Java中Map实现线程安全的3种方式  # 完美解决Java中的线程安全问题  # Java 单例模式线程安全问题  # Java ThreadLocal 线程安全问题解决方案  # Java中ConcurrentHashMap是如何实现线程安全  # Java 集合线程安全的几种解决方法  # 是指  # 互斥  # 多个  # 多线程  # 表现为  # 其他的  # 可以通过  # 热河  # 不需  # 绑定  # 调用者  # 就可以  # 都是  # 是一个  # 信号量  # 就会  # 也不  # 运行环境  # 还可以  # 的说 


相关文章: 网站网页制作专业公司,怎样制作自己的网页?  简单实现Android文件上传  网站制作价目表怎么做,珍爱网婚介费用多少?  如何通过西部数码建站助手快速创建专业网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  广东企业建站网站优化与SEO营销核心策略指南  子杰智能建站系统|零代码开发与AI生成SEO优化指南  学校建站服务器如何选型才能满足性能需求?  如何生成腾讯云建站专用兑换码?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何高效配置IIS服务器搭建网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何使用Golang安装API文档生成工具_快速生成接口文档  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何高效配置香港服务器实现快速建站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何快速上传建站程序避免常见错误?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  制作网站公司那家好,网络公司是做什么的?  建站主机是否属于云主机类型?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何快速配置高效服务器建站软件?  如何在腾讯云服务器上快速搭建个人网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  高端建站三要素:定制模板、企业官网与响应式设计优化  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何快速搭建高效香港服务器网站?  如何用PHP快速搭建高效网站?分步指南  如何在万网自助建站中设置域名及备案?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站168自助建站系统:快速模板定制与SEO优化指南  平台云上自助建站如何快速打造专业网站?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何快速建站并高效导出源代码?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站之星在线版空间:自助建站+智能模板一键生成方案  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  全景视频制作网站有哪些,全景图怎么做成网页?  python的本地网站制作,如何创建本地站点?  平台云上自主建站:模板化设计与智能工具打造高效网站  如何彻底删除建站之星生成的Banner?  网站微信制作软件,如何制作微信链接?  表情包在线制作网站免费,表情包怎么弄?  宿州网站制作公司兴策,安徽省低保查询网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星如何一键生成手机站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。