线程安全问题并不只是在移动开发中会有,而是在所有的多线程开发中都会碰到的问题。在非原子操作的情况下,当两个线程并发读写一个资源时出现的异常,都属于线程安全的问题。为了解决线程安全的问题,一般可以采用锁进行同步多线程的操作,或者将操作改为原子操作。
我接触的很多开发人员中,大多数都没有重视线程安全的问题,一方面是某些开发人员从PHP、Java等服务器端开发语言转型做客户端开发,之前都是和数据库打交道比较多,很少使用到多线程开发。另一方面是某些开发人员仅仅知道一些多线程设计要求,比如只在主线程更新UI,却不清楚多线程相关的一些设计规则,导致在程序中埋下线程安全的隐患。一旦埋下这种隐患,对于日后的追踪和调试都将造成巨大的困难。因为线程安全问题导致的错误不是必现的,偶发性很强,而且几乎没有规律可循,无法重现由线程安全问题导致的异常。想要解决线程安全问题,必须从设计环节入手,在多线程的开发中考虑可能会出现并发的情况。一般来说多线程读取一个资源是没有问题的,但是多线程读写或多线程写入都会造成问题。所以如何分析和判断是否存在并发操作的情况就非常重要。
很多人在使用多线程时,因为在开发环境中没有遇到线程安全导致的异常,就认为这段代码没有问题了。其实这种想法是非常错误的,就像我们强调在移动开发中(其实其它客户端开发也是一样的),永远不要在后台线程中去操作界面,原因就是在后台线程操作界面时,其实是对界面内存的数据进行写操作,而主线程在渲染界面时,需要从界面内存中读取数据。当这个读写操作恰好是在同一块内存时,就会发生异常。也许你侥幸在后台线程中去操作界面,程序也能很好的运行,但是这等于是给程序埋下了一颗定时炸弹,你无法预知它什么时候会爆炸,所有就制定了这样的一个要求。通过线程之间切换的方式,让所有的界面操作都在主线程中执行时,那么这些操作必然都是同步的。既然我们在涉及界面的多线程开发时这样去做,为什么要忽视其它模块的线程安全问题呢?
一个设计精良的程序,必然是高效、稳定和健壮的,要达到以上的这些目标,解决线程安全的问题是必不可少的,只有所有的移动开发人员都开始重视线程安全的问题,我们的移动App 崩溃率就会下降很多。要深入了解多线程开发,还需要对线程切换,互斥锁,循环锁,嵌套锁,信号量,线程池等技术进行深入的了解。我还在努力学习的过程中,如果文中有何错误或不妥,还请包涵,本人愿虚心接受教诲。顺便给大家推荐一个小说网站:http://www.xin17k.com
重视线程安全问题
最新推荐文章于 2024-08-27 10:23:09 发布