码迷,mamicode.com
首页 > 编程语言 > 详细

关于多线程的结介绍

时间:2016-05-05 21:50:13      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

 

线程状态

一、简单介绍

介绍:

      线程状态一般分为“运行态”,“就绪态”,“阻塞态”

     运行态:CPU当前在执行当前线程

     就绪态:线程线程处于可调度线程池,随时可能被调度到CPU执行

     阻塞态:线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

     死亡:当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡,线程对象会被销毁


线程的创建:

 self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

说明:创建线程有多种方式,这里不做过多的介绍。

技术分享

线程的开启:

[self.thread start];

技术分享

线程的运行和阻塞:

(1)设置线程阻塞1,阻塞2秒

    [NSThread sleepForTimeInterval:2.0];

   

(2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒

    NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];

    [NSThread sleepUntilDate:date];

技术分享

技术分享

线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

技术分享

技术分享

线程的死亡:

当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。

技术分享

技术分享

线程死亡后,线程对象从内存中移除。

技术分享

 技术分享

 

 

线程间通信

介绍:线程在执行的时候,往往需要通知另外一个线程执行特定的代码,这时就有了线程间通信
 
在主线程中执行run
      [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];  

在指定线程thread执行run

      [self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];

在当前线程执行run

      [self performSelector:@selector(run) withObject:nil]; 
 
线程安全
 

一、多线程的安全隐患

资源共享

1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源

比如多个线程访问同一个对象、同一个变量、同一个文件

当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题

示例一:

技术分享

 技术分享

互斥锁

互斥锁使用格式

@synchronized(锁对象) 

 {

     // 需要锁定的代码  

}

注意:锁定1份代码只用1把锁,用多把锁是无效的,互斥锁会极大的消耗资源,一般要避免使用互斥锁,也就是避免资源争夺的发生

 

IOS开发中的原子和非原子属性的选择

atomic:线程安全,需要消耗大量的资源

nonatomic:非线程安全,适合内存小的移动设备

 

 

 

关于多线程的结介绍

标签:

原文地址:http://www.cnblogs.com/hepingqingfeng/p/5462683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!