我们经常说线程安全线程安全,那么你对于线程安全的意思真的是了解的吗?下面就让我们一起来深刻的理解一下java线程安全吧!
一、什么是线程安全
既然讲到线程安全的问题的话,那么,不用多说,基本上问题隐患都是出现在多个线程访问的情况下产生的。
也就是说,确保在多条线程访问时,我们的程序还可以按照我们预期的行为去执行。
下面一起来看一段代码:
Integer count = 0; public void getCount() { count++; System.out.println(count); }
这段代码是非常简单的,下面来统计一下这个方法的访问次数,多个线程同时访问会不会出现什么问题。
在开启了3条线程,每一个线程循环10次,得到了下面的结果。
可以看出,这里的话,出现了2个26,那么为什么会出现这样的情况呢?
这种情况的出现,很明显的表明了这个方法根本就不是线程安全的。
最常见的导致这种情况出现的原因就是,A线程在进入方法之后,拿到了count的值,刚刚将这个值读取出来还没有改变count的值的时候,结果线程B也进来了,那么,就导致了线程A和线程B拿到的count值是相同的。
由此,我们可以知道这个不是一个线程安全的类,因为,他们都需要操作这个共享的变量。
实际上来说,要对线程安全问题给出一个明确的定义还是比较的复杂的,下面就根据这个程序,来对什么是线程安全进行一下总结。
在多个线程访问某个方法的时候,不论你通过什么样的调用方式又或者是说这些线程怎样交替的执行,在主程序当中都不需要去做任何的同步,这样的类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。
以上的内容就是对于线程安全的一个简单解释了,你清楚了吗?
更多java入门知识,请继续通过奇Q工具网来了解吧。
推荐阅读: