在线程中使用共享资源时,能够保证共享资源在任何时候都是原子的、一致的,这样的线程就是线程安全的线程。
共享资源是多线程中每个线程都要访问的类变量或实例变量,共享资源可以是单个类变量或实例变量,也可以是一组类变量或实例变量。多线程程序可以有多个共享资源。下面描述他们之间的一对多关系(*表示多):
多线程程序(1)----共享资源(*)----类变量或实例变量(1…*)
只有类变量和实例变量可以成为共享资源。
所谓原子性,是指一个共享资源的所有属性在任何时刻都是一起变化、密不可分的。
所谓一致性,是指一个共享资源的所有属性在变化之后一定会达到一个一致的状态。
特别注意:局部变量、作为参数传递的非类变量、非实例变量不是共享资源。所以他们是线程安全的。
对使用共享资源的方法要做到线程安全,就需要使用同步:synchronized关键字,synchronized关键字表示加锁,并发访问时只允许一个线程访问,通过线程的等待达到多线程同步的目的,synchronized关键可以对一个方法使用,也可以对一语句块使用synchronized(this){/*...*/}。
ThreadLocal对于线程安全还是很有用的,如果资源不是共享的,那么应该使用ThreadLocal,但如果确实需要在线程间共享资源,ThreadLocal就没有用了!
分享到:
相关推荐
关于线程安全与可重入性.pdf
servlet线程安全问题servlet线程安全问题
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
最近在做多线程方面的工作,工作中发现多线程中很多坑,这里就有一个List添加对象的误区,解释了List容量扩展后内存开辟导致的线程不安全性的问题,这里做个分享跟大家讲讲这个坑是怎么形成的怎么样避免。
什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等...
c++ stl线程安全 c++ stl线程安全 c++ stl线程安全
你还在用synchronized?线程安全相关知识深入剖析
该文件中实例说明了如何在Labwindows/cvi中使用线程锁和线程安全变量进行多线程程序设计
C++线程安全日志库-Win32接口实现,博客讲解:https://www.cnblogs.com/swarmbees/ ->C++线程安全日志库-Win32接口实现
mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的 QT的QSqlDatabase是基于mysql的,所以一样是线程不安全的 现讲明mysql为什么是线程不安全的,以及在多线程环境下如何使用mysql,...
线程安全的单例模式 线程安全的单例模式 线程安全的单例模式
操作系统c++编程实现安全型双向链表,线程的创建,利用线程对链表进行增删改操作,并检验结果是否正确
栈的线程安全问题 的解决代码 push pop synchronized THread
内容概要:文章内容从原子性、可见性、有序性三个方面介绍C++线程安全问题的原因。通过原子操作、线程同步如互斥锁、读写锁、条件变量、信号量等方法解决C++线程安全问题。同时介绍了线程安全的单例,饿汉模式和懒汉...
Action是否线程安全 Action是否线程安全 Action是否线程安全
申明:不是原创,不是原创,只是转载。 这是一个来自网上的例子 ...用于测试QList的线程安全性,因原作者只给出源代码,没有给出测试结果,这里生成一个QT工程,打开即可编译,内部有ReadME.txt,简要说明
主要介绍了Java 集合中的类关于线程安全的相关资料,需要的朋友可以参考下
ProC 线程安全问题案例,多线程proc开发简单介绍
servlet与Struts action线程安全问题分析