多个线程同时对共享资源进行修改时,有可能会发生读写操作的指令交错,导致结果跟预期不一样
临界区(critical region):一段对共享资源的多线程并发读写操作的代码块
竞态条件(Race Condition):多个线程代码在临界区执行,由于执行顺序不同而导致结果无法预测,例如数据丢失不一致等
解决方法:使用锁,同步工具,原子类等机制
死锁的概念:多个线程由于资源竞争或通信问题导致的阻塞情况。例如:线程1持有线程2所需的资源,且线程1不释放,那么线程2就永远阻塞。
死锁的预防:
死锁的解决:
活锁:多个线程相互影响对方退出同步代码块的条件而导致线程一直运行的情况。例如,线程1的退出条件是count=5,而线程2和线程3在其代码块中不断地是count进行自增自减的操作,导致线程1永远运行。
活锁的解决:
饥饿(Starvation):某个线程长期无法获取CPU时间片执行权而无法运行的情况,一般发生在字段调用不公平或优先级设置有问题的情况下
内存一致性问题:由于JIT即时编译器对缓存的优化和指令重排等造成的内存可见性和有序性问题,可以通过synchronized,volatile,并发集合类等机制来解决
有多种方法可以避免临界区中的竞态条件:
成员变量和静态变量的线程安全分析要分两种情况:
局部变量是否线程安全在于它是否逃逸出方法的作用范围
不可变类:内部属性是不可改变的,只能读不能写,所以是线程安全的
方法加上了synchronized方法的类:
这里的线程安全是指,多个线程调用它们同一个实例的方法时,是线程安全的,但仅仅能保证当前调用的方法是线程安全的,不同方法之间是线程不安全的
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有