在多线程的环境下数据什么时候会存在线程安全的问题?
1.多线程并发
2.线程之间有共享数据
3.线程之间的共享数据有修改行为
如何解决线程安全的问题?
让线程不能并发,也就是让线程排队执行,这种机制被称为“线程同步机制”,这种机制会牺牲一部分效率,但是能保证线程的安全
异步编程模型和同步编程模型
异步编程模型:A线程和B线程两个线程分别交替独立执行,也就是多线程并发,虽然效率高,但是不安全
同步编程模型:A线程需等待B线程结束才能执行,或者B线程需要等待A线程结束才能执行,两个线程之间存在排队等待的关系,效率低,但是线程安全
java中的三大变量
1.实例变量(堆中)
2.静态变量(方法区)
成员变量包括1和2
3.局部变量(栈中)
局部变量和常量不会有线程安全的问题,因为在局部变量中,线程与线程之间的内存空间是相互独立的,数据不共享。而常量是不会被修改的,也不会有·线程安全的问题
如果是局部变量,建议选择StringBuilder,因为局部变量不会有线程安全的问题,StringBuilder效率更高。
synchronized在成员变量中锁的是对象,在静态变量中锁的是类。