一:NSThread的概念:

二:NSThread的使用:

1.创建一个Thread

1.1第一种方法:

- (void)test1{
NSString *str = @"zhengli"; NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:str];// 注意object:这个参数是提供个run方法的。
[thread start];// 注意用上述方法创建NSThread对象时要使用start这个方法 }

这种方法需要使用[thread start]才会开始执行线程里的内容。

1.2第二种方法:

- (void)test2{
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"zhengli"];
}

比较简单易用。

1.3第三种方法

- (void)test3{// 隐式创建线程对象
[self performSelectorInBackground:@selector(run) withObject:nil]; }

三种方法总结:可以看到虽然第一种方法比较麻烦,需要调用[thread start]这个对象方法,但是可以得到一个线程对象的实例,在下面的设置属性的过程中可能会更加方便。而后面的两种方法虽然使用起来简单,无需再次调用对象方法,但是没法得到NSThread对象,设置起属性来会麻烦一些。

三:NSThread的属性:

 @property (readonly, getter=isExecuting) BOOL executing NS_AVAILABLE(10_5, 2_0);
@property (readonly, getter=isFinished) BOOL finished NS_AVAILABLE(10_5, 2_0);
@property (readonly, getter=isCancelled) BOOL cancelled NS_AVAILABLE(10_5, 2_0); @property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0); @property NSUInteger stackSize NS_AVAILABLE(10_5, 2_0); @property (readonly) BOOL isMainThread NS_AVAILABLE(10_5, 2_0); @property double threadPriority NS_AVAILABLE(10_6, 4_0); // To be deprecated; use qualityOfService below @property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0); // read-only after the thread is started

其中

@property double threadPriority NS_AVAILABLE(10_6, 4_0); // To be deprecated; use qualityOfService below

这个属性是线程的优先级,官方注释如下:

@property double threadPriority

Description

The thread priority to use when executing the operation

The value in this property is a floating-point number in the range 0.0 to 1.0, where 1.0 is the highest priority. The default thread priority is 0.5.

The value you specify is mapped to the operating system’s priority values. The specified thread priority is applied to the thread only while the operation’s main method is executing. It is not applied while the operation’s completion block is executing. For a concurrent operation in which you create your own thread, you must set the thread priority yourself in your custom start method and reset the original priority when the operation is finished.

默认0.5,而且在大量的数据下才会体现出差距,The value you specify is mapped to the operating system’s priority values.它的值其实取决与操作系统的优先级值。

四:线程的状态

总共有五种线程状态,分别为:New(新建),Runnable(就绪),Running(运行),Blocked(阻塞),Dead(死亡).

1.New:当一个线程对象被创建时,它将会处于New这个状态,并处在内存中。

2.Runnable : 当对象执行了start这个对象方法后,就会变为Runnable这个状态,称为i状态,此时系统会将thread这个对象放入可调度线程池中(这个池内也可能包含着其他线程对象!),也可以理解为,只要在这个池内,就可能成为处于Runnable状态或者Running状态。

3.Running: 当CPU调度thread后,它将处于Running状态,注意thread此时仍在池内。但当CPU调度完这个线程并又调度了其他线程时,这个线程就又会变为Runnable的状态,当然仍在池内。

4.Blocked:当这个线程调用了seelp方法或者等待同步锁时,它会从池内移出且处于Blocked状态,但是没有被销毁,仍在内存中,只是不再可调度线程池内。

当seelp到时或者得到同步锁时,线程将又会回到线程池且处于runnable状态。

5.Dead:当线程任务执行完毕或者被强制退出时,就会从池内移出且被在内存中销毁,此时成为处于Dead状态。

2016- 1- 16 NSThread 的学习的更多相关文章

  1. mysql查询练习题-2016.12.16

    >>>>>>>>>> 练习时间:2016.12.16 编辑时间:2016-12-20-->22:12:08 题: 涉及:多表查询.ex ...

  2. 【转载】webstorm11(注册,激活,破解,码,一起支持正版,最新可用)(2016.11.16更新)

    很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了 最近封的厉害仅作测试 选择 License ...

  3. Murano Weekly Meeting 2016.08.16

    Meeting time: 2016.August.16 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: ...

  4. 2016.8.16上午纪中初中部NOIP普及组比赛

    2016.8.16上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1334 这次也翻车了,感觉比之前难多了. 辛辛苦苦改完了,太难改 ...

  5. 2016.8.16 JQuery学习记录

    1.$(document).ready(function(){}); 这个函数会在浏览器加载完页面之后,尽快执行: 2.所有的JQuery函数用有个$开始表示,All jQuery functions ...

  6. 2016.8.16 HTML5重要标签及其属性学习

    1.运用BootStrap的基本布局: 2.基本布局第二步: ] 3.BootStrap提供了一个class=”well“”类,可以给你种深度的感觉: 4.不是每一个类都是为了CSS,有些类创建出来只 ...

  7. 2016年3月16日Android学习笔记

    1.Jdk1.7以上switch语句中才能用字符串,在Android Studio中我改正了jdk的版本为1.8,但是还是出同样的错误,原来我用的sdk版本是4.4的,改成5的就没有问题了. 2.引入 ...

  8. 2016.8.16 Java培训第一天

    1. 十进制转换二进制 31/2=15余1  15/2=7余1 7/2=3余1 3/2=1余1    31的二进制结果为11111 35/2=17余1  17/2=8余1  8/2=4余0 4/2=2 ...

  9. ubuntu(16.04.01)学习-day1

    1.修改root用户密码 sudo passwd root 按提示进行设置. 2.从Ubuntu 16.04开始,用户可以实现改变启动器的位置,可以将启动器移到屏幕底部,但是无法移到右边或顶部.打开终 ...

随机推荐

  1. 8个实用的页面布局和用户界面jQuery插件

    网页设计师和网页开发人员在做项目的时候可能会有一些页面的布局或者对于UI有一些特定的要求.可能一些需求不能单独使用CSS就能实现的.于是很多时候开发人员都会消耗大量的时间和精力去写一些JS来协助实现. ...

  2. EM算法原理以及高斯混合模型实践

    EM算法有很多的应用: 最广泛的就是GMM混合高斯模型.聚类.HMM等等. The EM Algorithm 高斯混合模型(Mixtures of Gaussians)和EM算法 EM算法 求最大似然 ...

  3. Innodb中的事务隔离级别和锁的关系

    前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...

  4. MyBatis实体类映射文件模板

      <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC " ...

  5. 30 个很棒的 PHP 开源 CMS 内容管理系统

    本文汇集了30个优秀的开源CMS建站系统,采用PHP开发.以下列表不分先后顺序. 1. AdaptCMS AdaptCMS Lite 是一个开源的CMS系统,主要特点是易用,而且可以轻松和其他系统接驳 ...

  6. OpenGL基础图形编程

    一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充 ...

  7. Your content must have a ListView whose id attribute is 'android.R.id.list'

    修改ListView的ID为 ' @android:id/list ' <ListView android:id="@android:id/list" android:lay ...

  8. juery 选择器 选择多个元素

    使用,号: $("#goodSource,#mailState") 选择了id为goodSource或者mailState的元素,当两者之间有任何一个有改变时,将会触发该操作. / ...

  9. (转)虚拟机的桥接模式和NAT模式区别

    不管是虚拟机的桥接还是NAT都是占用实机网络的.只不过两种方式有些差异,在通过IP或者拨号连接限速的网络中,差异就很明显了     举个不太恰当但简单的例子,一个百兆的网卡你可以把它想象成一个100车 ...

  10. [示例]NSDictionary编程题-字典的排序应用(iOS5班)

    代码? #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...