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,或扫描本页底部的二维码。课程配套素材下载地址:
资料下载