线程为什么不安全:我们在一定的硬件条件下,想去追求更高的效率,甚至极致的效率到达了一定的临界点,就可能会造成线程的不安全。
1,数据不可变
一切不可变的对象,一定是线程安全的(例如我们只是查询看一下,或者公用这个对象但是我们不改变这个对象)
2,互斥同步
只能一个线程使用,不能几个线程同时使用,搞成了一种抽象的串行化的执行。加锁
3,非阻塞同步
互斥同步带来的问题就是我们的线程如果有一个在用其他的就必须等待,然后没线程用了我们又要唤醒需要用数据的线程,真有用的时候我们其他的线程可以自旋
4,无同步方案
如果我们的线程都要去操作一个共同的数据,可以使用ThreadLocal等,我们创造一些副本让我们的线程去操作副本而不是直接去操作我们数据本身