1. 代码所在的进程含有多个线程,线程可能会同时运行这段代码,若所有的运行结果是相同的,且其他变量的值也和预期的是一样的,就是线程安全的。
2. 通常线程不安全的对象都是由全局变量或静态变量引起的。
3. 多个线程同时对全局变量、静态变量执行写操作,就会影响线程安全。
解决方案:
1. 加锁 来实现线程执行的串行化
2. 非阻塞同步来实现线程安全。原理就是:通俗点讲,就是先进性操作,如果没有其他线程 争⽤共享数据,那操作就成功了;如果共享数据有争⽤,产⽣冲突,那就再采取其他措施(最 常⻅的措施就是不断地᯿试,知道成功为⽌)。这种⽅法需要硬件的⽀持,因为我们需要操作 和冲突检测这两个步骤具备原⼦性。通常这种指令包括CAS SC,FAI TAS等。
3. 线程本地化,⼀种⽆同步的⽅案,就是利⽤Threadlocal来为每⼀个线程创造⼀个共享变ᰁ 的副本来(副本之间是⽆关的)避免⼏个线程同时操作⼀个对象时发⽣线程安全问题。
标签:变量,安全,线程,操作,共享,全局变量 From: https://www.cnblogs.com/return-study-wa/p/16291459.html