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

线程锁

时间:2015-08-10 23:51:54      阅读:1699      评论:0      收藏:0      [点我收藏+]

标签:

 

多线程实现方式

1.NSThread  NSOperation  GCD

一,线程的概念

程序,进程,线程

程序:一些指令的集合

进程:运行中的程序,需要占用内存空间,也是操作系统分配资源的基本单位

线程:是进程的基本组成部分,每个进程至少有一个线程   iOS应用程序默认创建了一个主线程,系统会自动维护这个线程的生命周期,如果是操作时间比较长的代码,比如:网络下载,数据库的操作,如果在主线程执行,会阻塞主线程,所有我们需要创建自己的主线程

 

二,为什么使用线程

三,(NSThead) 怎样创建线程

1> 第一种方式

initWithTarget:(id)target selector:(SEL)selector object;(id)object

 /**

     第一个参数:线程执行体方法所属的对象

     第二个参数:线程执行体方法所属的 方法

     第三个参数:线程执行体方法所属的实参

     */

    NSNumber *n = @50;

   NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(creatThreadTwo:) object:n];

    

    //设置线程的名字

    t.name = @"线程B";

   // [t setName:@"线程B"];

    //这种方式创建的线程,需要手动启动线程

    [t start];

 

2> 第二种方式

detachNewThreadSelector:@selector(SEL) toTarget:target withObject:object

    /**

     *  @param SEL 线程执行体的方法

     *  @param toTarge 线程执行体所属的对象

     *  @param ithObject 线程执行体方法传递的实参

     *   

     */

    NSNumber *n = @100;

   // @one === [NSNumber numberWiuthInt:100];

    //创建并启动一个线程

    [NSThread detachNewThreadSelector:@selector(createOne:) toTarget:self withObject:n];

 

四,怎样取消线程,退出线程

 

线程退出3种情况

 

1> 线程的执行体执行结束

2> 线程的执行出错

3>手动退出线程

 

五,线程的优先级(线程执行顺序,影响执行频率)

优先级的值在0~1之间

默认0.5

值越大,线程执行的概率越高(并不是执行率越高)

 

六,线程锁

多线程在修改同一个资源时,会出现问题,解决这个问题的方法 通常是给线程加锁

线程加锁有三种方式

1>  @synchronized(self){代码块}

2> //加锁(必须初始化)

    [_myLock lock];

 

代码块        

    //解锁

    [_myLock unlock];

3> //加锁(必须初始化)

[_conditionLock lock];

代码块       

    //解锁

    [_conditionLock unlock];

2.NSoperation

首先需要创建 NSOperationQueue  队列

一, NSInvocationOperation 

initWithTarget:self selector:@selector(threadOne:) object:n

//添加到队列里

[queue addOperation:op1];

二, NSBlockOperation

+ (instancetype)blockOperationWithBlock:(void(^)(void)block;

三,自己实现

1> 首先继承与 NSOPeration 创建一个类,实现父类里面的main方法

2> 创建一个队列(NSoperationQueue对象),创建imageOperation 对象,添加到队列里面

 

 

 

day10 多线程二

一, block

 

二,GCD

//主线程所在的串行队列

//全局的并行队列

//自己创建的串行队列和并行队列

 

//异步和同步的方式创建线程

dispatch_async(dispatch_queue_t queue ,void (^block)(void));

dispatch_sync(dispatch_queue_t queue ,void (^block)(void));

 

 

 

 

 

 

 

 

 

 

 

 

线程锁

标签:

原文地址:http://www.cnblogs.com/miantiao168/p/4719543.html

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