iOS开发中的神兵利器

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

2018-04-11  本文已影响0人  互动教程网

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

15. 创建一个无限循环。

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

image

26. 由于图书销售的方法被锁保护,使变量可以被安全地修改,此时在控制台输出的已售图书的数量,和剩余的图书数量都是正常的。

image

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

apps8 2.png
上一篇下一篇

猜你喜欢

热点阅读