Java线程安全
线程安全,那么什么是线程不安全呢?
在单线程运行的情况下,如果 sum = 0,加1后,sum=1一定是对的,但在多线程的情况下,有两个线程同时对sum加1,那么结果可能有两种,一种是sum=1,一种是sum=2;原因就在于sum被定义为全局变量。
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
这两篇文章总结的很到位:
http://www.iteye.com/topic/806990
http://www.iteye.com/topic/808550