主业iOS/PHP,副业啥都玩,QQ:705719110,欢迎来撩!

iOS中的多线程(二)

iOS开发 随风 151℃ 0评论

在iOS中实现多线程有三种方法NSThread、NSOperation、GCD,下面我们先来看一下 NSThread

一、NSThread中的操作

创建、启动线程

二、下面我们看一下举例

首先我们看一下古老的方法创建thread

这里没有造成线程阻塞,在打印出线程数据的同时还可以对textView进行操作。
下面看一下NSThread创建的过程

三、线程间的通信

线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信,1个线程传递数据给另1个线程,在1个线程中执行完特定任务后,转到另1个线程继续执行任务。

下面我们看一下一般图片下载的操作,当我们加载图片的时候都比较耽误时间,那我们就新建一个线程,然后在新线程中下载图片,回到主线程中刷新页面。

四、多线程的安全隐患

资源共享,1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个对象、同一个变量、同一个文件,当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。
比如我们在银行存钱的同时取钱,再比如我们买票的时候几个人同时买可能就会出现这种问题,下面我们看一下问题代码。

来看打印结果,很多数都被买了多次,这怎么可能!!!

thread

五、多线程的安全隐患的解决办法:线程锁

那么我们怎么来解决这个问题呢?这里就为我们提供了一个工具—线程锁,当一个线程在对一个数据进行操作的时候会给这个线程添加一个“锁”锁住,不允许别的线程进行操作,等到这次的操作完成之后再解锁。其实线程锁有很多种,但是只能添加一把锁,我们这里就做一下演示。

这里介绍了两种方法,一种是NSLock,另一种是自动的锁 synchronized,得到的结果都是一样的

thread1

转载请注明:怼码人生 » iOS中的多线程(二)

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址