线程安全的定义
…可以在多个线程中调用,并且在线程之间不会错误交互。
…可以同时被多个线程安全,而且调用者无需执行额外动作。
听了上面的概念是不是一脸困惑?那就下面来一个栗子吧!
线程安全可能是一个复杂的问题,在没有同步锁的情况下,多个线程执行顺序不可预测的,甚至会产生奇怪的结果,出现脏数据等情况。
如下文代码所示:
public class UnsafeSequence
{
private int value = 0;
public int getNext()
{
value++
}
}
上述代码如果被多个线程同时调用, 将产生各种奇怪的结果。如下图所示,A表示一个线程,B表示为另外一个线程。当A与B进程并发交替执行的时候,并不加同步锁的时候,value将产生不同的结果。