4.1 通过售书场景讲解线程的锁和解锁 [iOS开发中的神兵利器]



1. 本节课将为您演示,线程的锁和解锁。使用锁可以防止多个线程,在访问同一个数据对象时,对数据造成的破坏。


2. 现在开始编写代码,实现一个图书销售程序,并通过该程序演示线程锁的使用。


3. 接着添加一个属性,作为书本总的数量。


4. 添加另一个属性,作为书本已经售出的数量。


5. 添加一个属性,该属性将作为线程的锁。


6. 对线程锁对象进行初始化。


7. 然后创建一个线程对象,并设置该线程的目标、选择器和数据对象等参数。


8. 设置线程对象的名称。


9. 接着开始启动该线程。


10. 创建第二个线程对象,并设置该线程对象的各个属性。


11. 然后设置线程对象的名称,并启动该线程。


12. 创建第三个线程对象,并设置该线程对象的各个属性。


13. 设置第三个线程对象的名称,并启动该线程。


14. 添加一个方法,用来执行图书销售的动作。


15. 创建一个无限循环。


16. 添加一个判断语句,当仍然有图书尚未销售时,则执行后面的代码,否则结束并退出线程。


17. 添加一个休眠语句,放慢线程的执行动作,以方便观察线程锁的作用。


18. 将已销售的书籍的数量增加1,模拟图书销售的操作。


19. 图书销售一本之后,将图书总的数量减一。


20. 获得执行该方法的线程名称。


21. 然后在控制台输出线程的名称,已经售出的线程数量和剩余的图书数量。接着点击左上角的[编译并运行]按钮,启动模拟器预览项目。


22. 观察控制台输出的图书销售信息,由于没有添加线程锁,致使有多个线程同时修改了图书销售数量的属性,从而产生图书剩余数量为-1的异常情况。


23. 接着给线程添加锁,测试添加线程锁之后的程序。


24. 接着在动作执行之前,添加一个线程锁,使该方法同时只被一个线程所访问。


25. 最后在方法的尾部,添加解锁语句,解除对访问的锁定,使其它线程可以获得调用方法的权利。接着再次启动模拟器预览项目,并观察控制台的日志输出。




本文整理自:《app开发中的神兵利器》,真正的[手把手]教学模式,用最快的速度上手iOS开发,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1209739676,或扫描本页底部的二维码。课程配套素材下载地址:资料下载

0