ios-创建线程的基本方法和线程的状态以及属性

来源:互联网 发布:java jar 临时指定jdk 编辑:程序博客网 时间:2024/05/17 09:46
- (void)viewDidLoad {    [super viewDidLoad];    //创建NSThread对象,方式1 NSThread * thread =[[NSThread alloc]initWithTarget:self selector:@selector(test3:) object:@"哈哈"];    [thread start];//    //方式2    [NSThread detachNewThreadSelector:@selector(test) toTarget:self withObject:nil];//    //方式3   [self performSelectorInBackground:@selector(test) withObject:nil];    }-(void)test3:(NSString *)str{    NSLog(@"%@ %@",str,[NSThread currentThread]);}-(void)test{    NSLog(@"哈哈");}
对于这个创建线程的方法,大致步骤其实是这样的,创建了一个线程对象就表示在内存中已经有一个线程对象了,当我们调用[thread start]这个方法就表示这个线程进入了可调度的线程池中了。也就是说调用了start中,线程就进入了就绪状态,等待CPU的执行了,CPU调度当前线程的时候,线程就进入了运行状态,当你运行的程序比较耗时的时候,CPU会分步执行就是说先执行一部分,然后把那一部分的状态保存起来,然后CPU再去执行其他线程,你的线程又进入了就绪状态。如果我们在方法中调用了sleep方法就表示这个线程进入了堵塞状态,当过了睡眠的时间就会又回到了就绪状态
NSThread * thread =[[NSThread alloc]initWithTarget:self selector:@selector(test3:) object:@"哈哈"];    [thread start];

当我们在方法调用[NSThread sleepForTimeInterval:2];的时候能让当前线程进入堵塞状态,先休眠两秒钟,当我们调用[NSThread exit]; 能让线程强制退出。进入死亡状态。

当线程执行完毕之后就无法再次使用了。

线程有个属性是名字,我们可以给线程取个名字直接这么做就可以了,当然用这个前提是我们能获取到线程的对象。当给线程取名字之后,可以很快的去确定这个错误是由哪个线程引发的。

thread.name=@"线程1";
在程序运行期间,系统会自己的帮我们创建一些辅助的线程.

设置线程的优先级,默认是0.5,取值范围是0.0到1.0,线程的优先级只是在内核调度的算法在决定运行哪个线程的时候,会把线程的优先级作为一个考核的因素,较高线程的优先级比较低线程的优先级有更多的执行机会,较高的优先级不能保证你线程具体的执行时间,只是比较于优先级比较低的线程,它更有可能被调度器去选择执行。

thread.threadPriority=1.0;


阅读全文
0 0