1. 本节课将为您演示,线程的锁和解锁。使用锁可以防止多个线程,在访问同一个数据对象时,对数据造成的破坏。
![](https://img.haomeiwen.com/i5981183/c0b32fcaf53bd3f7.png)
2. 现在开始编写代码,实现一个图书销售程序,并通过该程序演示线程锁的使用。
![](https://img.haomeiwen.com/i5981183/0450387b24d281b8.png)
![](https://img.haomeiwen.com/i5981183/9c4d52ac17010647.png)
![](https://img.haomeiwen.com/i5981183/43aafe307a67ef97.png)
![](https://img.haomeiwen.com/i5981183/139165d6d46abb4b.png)
![](https://img.haomeiwen.com/i5981183/809c42e7eaa4260f.png)
7. 然后创建一个线程对象,并设置该线程的目标、选择器和数据对象等参数。
![](https://img.haomeiwen.com/i5981183/7daacafec74ef2bd.png)
![](https://img.haomeiwen.com/i5981183/2434156e1912be42.png)
![](https://img.haomeiwen.com/i5981183/8ef327c9758b13bf.png)
![](https://img.haomeiwen.com/i5981183/5f932dc937e4a4ca.png)
![](https://img.haomeiwen.com/i5981183/baee27f1a9a15296.png)
![](https://img.haomeiwen.com/i5981183/363542eb2d2acbab.png)
![](https://img.haomeiwen.com/i5981183/dd03c1b5db3dd724.png)
![](https://img.haomeiwen.com/i5981183/b357d13da220e4e0.png)
![](https://img.haomeiwen.com/i5981183/1f69fd9a04bbddea.png)
16. 添加一个判断语句,当仍然有图书尚未销售时,则执行后面的代码,否则结束并退出线程。
![](https://img.haomeiwen.com/i5981183/c2fb40cfac251bf0.png)
17. 添加一个休眠语句,放慢线程的执行动作,以方便观察线程锁的作用。
![](https://img.haomeiwen.com/i5981183/1ca63181cc9e6271.png)
![](https://img.haomeiwen.com/i5981183/ecc1b30fab188248.png)
![](https://img.haomeiwen.com/i5981183/6edfafc6d35ccb00.png)
![](https://img.haomeiwen.com/i5981183/48c097a6a74eaa39.png)
21. 然后在控制台输出线程的名称,已经售出的线程数量和剩余的图书数量。接着点击左上角的[编译并运行]按钮,启动模拟器预览项目。
![](https://img.haomeiwen.com/i5981183/07819d0138dab5a9.png)
22. 观察控制台输出的图书销售信息,由于没有添加线程锁,致使有多个线程同时修改了图书销售数量的属性,从而产生图书剩余数量为-1的异常情况。
![](https://img.haomeiwen.com/i5981183/b0898b2b923d2ca1.png)
![](https://img.haomeiwen.com/i5981183/5eba90ba564d00d6.png)
24. 接着在动作执行之前,添加一个线程锁,使该方法同时只被一个线程所访问。
![](https://img.haomeiwen.com/i5981183/0ab7eb4f15a79067.png)
25. 最后在方法的尾部,添加解锁语句,解除对访问的锁定,使其它线程可以获得调用方法的权利。接着再次启动模拟器预览项目,并观察控制台的日志输出。
![](https://img.haomeiwen.com/i5981183/aab336b50223cc55.png)
26. 由于图书销售的方法被锁保护,使变量可以被安全地修改,此时在控制台输出的已售图书的数量,和剩余的图书数量都是正常的。
![](https://img.haomeiwen.com/i5981183/01fc0d017e07b4f6.png)
本文整理自:《app开发中的神兵利器》,真正的[手把手]教学模式,用最快的速度上手iOS开发,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1209739676,或扫描本页底部的二维码。课程配套素材下载地址:资料下载
![](https://img.haomeiwen.com/i5981183/dbb5a7562b6b08f2.png)
网友评论