• 什么是线程安全?
    线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

  • 如何保证线程安全呢?
    1)使用线程安全的类;
    2)对线程不安全的代码块加锁(synchronized、lock);
    3)多线程并发情况下,线程共享的变量改为方法局部级变量-->ThreadLocal
    ThreadLocal:多线程将主存共享数据变成本地局部变量
    关于threadlocal请参考:https://blog.nowcoder.net/n/54ffbf919eae469983db38c35c55190b

  • 线程安全体现在什么方面?

1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);
2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);
3.有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。
关于三个特性的详情请见原文链接:https://blog.csdn.net/weixin_40459875/article/details/80290875