线程(一) ~ 线程(四)章节导图
导图https://naotu.baidu.com/file/07f437ff6bc3fa7939e171b00f133e17
线程安全
什么是线程安全?
业务中多线程同时访问一个对象或方法时我们不需要做额外的处理(像单线程编程一样)程序可以正常运行并能获取到正确的结果(不会因为多线程而出错)我们就认为上面的对象或方法是线程安全的;
线程安全问题三大类?
1.运行结果错误
2.活跃性问题(死锁、活锁、饥饿)
3.对象发布和初始化时安全问题
面试题
多线程带来性能问题的原因?
1.上下文切换;
2.内存同步;
什么是上下文切换?
正在运行的线程被其它线程抢占了CPU资源,原本正在运行的线程需要把当前上下文信息(CPU寄存器值,程序计数器等数据)保存到内存中以便下次再次被CPU调度到继续执行,再执行另一个线程的过程叫作上下文切换;
何时会进行上下文切换?
1.线程执行时间超过CPU为其分配的时间片;
2.线程执行了sleep()/wait()方法;
3.线程IO过程引起的阻塞;
你知道有哪些线程不安全的情况?
1.运行结果错误
2.活跃性问题(死锁、活锁、饥饿)
3.对象发布和初始化时安全问题
哪些情况下需额外注意线程安全?
1.访问共享变量或资源会有并发安全问题比如对象属性、静态变量、共享缓存;
2.所有依赖时序的操作;(如:原本应该是先写后读,而多线程下可能是先读后写);
3.不同数据之间存在捆绑关系(如事务:应多个操作同时成功或同时失败);