什么是线程安全? 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据补充回答: 比如说,两个线程操作同一个ArrayList变量,那么一个线程这一时刻读的数据可能在下一刻要改变。
一般在类似于下面的情景下考虑线程安全的问题:
ArrayList products=new ArrayList ();
products用来存放生产出来的产品。
现在假设:有3个消费者线程,2个生产者线程。
每个生产者线程生产出一个产品,执行
products.add(new Product());
每个消费者线程消费一个产品执行
if(products.size()>=1){ products.remove(0);}
如果products里现在只有一个产品可以消费,但是有2个消费者线程请求消费,那么就有可能出现一个产品被同时消费的问题,而这是和实际不符的。
但是不同的线程访问Vector的时候不会发生这种错误,因为java会有相应的机制是同一时刻只有一个线程对这个变量操作 。
分享到:
相关推荐
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
servlet线程安全问题servlet线程安全问题
你还在用synchronized?线程安全相关知识深入剖析
什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等...
mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的 QT的QSqlDatabase是基于mysql的,所以一样是线程不安全的 现讲明mysql为什么是线程不安全的,以及在多线程环境下如何使用mysql,...
经常会看到说HashMap是线程不安全的,ConcurrentHashMap是线程安全的等等说法,不禁有个疑问,什么是线程安全?什么样的类是线程安全的? 1.什么是线程安全性(what) 线程安全定义,最核心是正确性, 正确性:多个...
最近在做多线程方面的工作,工作中发现多线程中很多坑,这里就有一个List添加对象的误区,解释了List容量扩展后内存开辟导致的线程不安全性的问题,这里做个分享跟大家讲讲这个坑是怎么形成的怎么样避免。
c++ stl线程安全 c++ stl线程安全 c++ stl线程安全
该文件中实例说明了如何在Labwindows/cvi中使用线程锁和线程安全变量进行多线程程序设计
C++线程安全日志库-Win32接口实现,博客讲解:https://www.cnblogs.com/swarmbees/ ->C++线程安全日志库-Win32接口实现
操作系统c++编程实现安全型双向链表,线程的创建,利用线程对链表进行增删改操作,并检验结果是否正确
线程安全的单例模式 线程安全的单例模式 线程安全的单例模式
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
能学到什么:了解C++线程安全问题的原因,以及掌握解决线程安全问题的方法。同时能够掌握一下锁的使用。能够了解C++智能指针的使用场景。阅读建议:能够详细阅读,同时配合整理的例子进行练习使用,能够快速的掌握...
申明:不是原创,不是原创,只是转载。 这是一个来自网上的例子 ...用于测试QList的线程安全性,因原作者只给出源代码,没有给出测试结果,这里生成一个QT工程,打开即可编译,内部有ReadME.txt,简要说明
Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...
栈的线程安全问题 的解决代码 push pop synchronized THread
Action是否线程安全 Action是否线程安全 Action是否线程安全
ProC 线程安全问题案例,多线程proc开发简单介绍
当对一个复杂对象进行某种操作时,从操作开始到操作结束,被操作的对象...如果其他线程企图访问一个处于不可用状态的对象,该对象将不能正确响应从而产生无法预料的结果,如何避免这种情况发生是线程安全性的核心问题