课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单提到了软件开发的线程安全问题,今天我们就一起来了解一下,线程安全的概念与需求分析。
1、什么是线程安全
不管业务中遇到怎样的多个线程访问某对象或某方法的情况,而在编程这个业务逻辑的时候,都不需要额外做任何额外的处理(也就是可以像单线程编程一样),程序也可以正常运行(不会因为多线程而出错),就可以称为线程安全。
主要是两个问题
数据争用:数据读写由于同时写,会造成错误数据
竞争条件:即使不是同时写造成的错误数据,由于顺序原因依然会造成错误,例如在写入前就读取了
2、如何避免线程安全问题
运行结果错误:a++多线程下出现消失的请求现象
活跃性问题:死锁、活锁、饥饿
对象发布和初始化的时候的安全问题
3、各种需要考虑线程安全的情况
访问共享变量或资源,会有并发风险,比如对象的属性、静态变量、共享缓存、数据库等
所有依赖时序的操作,即使每一步操作都是线程安全的,还是存在并发问题
read-modify-writer操作:一个线程读取了一个共享数据,并在此基础上更新该数据。该例子在上面的a++已展示。
check-then-act操作:一个线程读取了一个共享数据,并在此基础上决定其下一个的操作
不同的数据之间存在绑定关系的时候
IP和端口号
我们使用其他类的时候,如果对方没有声明自己是线程安全的,那么大概率会存在并发问题
hashmap没有声明知己是并发安全的,所以我们并发调用hashmap的时候会出错
4、多线程会导致的问题
什么是性能问题、性能问题有哪些体现?
为什么多线程会带来性能问题
调度:上下文切换
协作:内存同步
调度:上下文切换
什么是上下文?:保存现场
缓存开销:缓存失效
何时会导致密集的上下文切换:抢锁、IO
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。