NSOperation: 定义了任务的执行环境、状态等基本属性,继续该类来指定具体的操作,通常情况下,编写NSOperation的 子类来定义具体的操作。 0
NSInvocationOperation: NSOperation的子类,可以指定操作方法。
NSOperationQueue: 运行队列(Operation queue)的管理者,配合NSOperation的子类对象和NSIvocationOperation对象 使用,通过添加操作对象完成并发操作。
NSRunLoop: 表示程序的运行回路,该类的对象可以接收到各种时间(如来自NSTimer的时间变化),协助程序对这些事 件做出响应。
NSTimer: 代表定时器的类。用它来设定时间间隔,到时间后启动,发送消息。一般来说,NSTimer和NSRunLoop想 配合使用。
子线程不能执行UI更新操作,只有主线程可以
NSThread:
方法1:由系统分发出一个子线程,管理权归系统所有。
方法1:
[NSTread detachNewThreadSelector:@selector(task) toTarget:self
withObject:nil];
方法2:自定义的NSThread类,自己开辟子线程,由自己进行管理。
方法2:
NSThread *_thread =[[NSThread alloc] initWithTarget:self selector:@selector(task) object:nil];
[_thread start]; 该方法是类自己开辟线程,所以由自己进行管理。
NSInvocationOperation: 方法1是类自己开辟线程,所以由自己进行管理。
方法1:
NSInvocationOperation *op=[[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(task) object:nil]; [op start];
NSOperationQueue:
方法2:将对象放入运行对列中,系统会自动生成一个线程,来执行Operation对象。 如果将最大并发数设置为1的话,则同时只用一个线程运行,也就是说,op1,op2执行的任务会顺次
执行。由此可解决线程同步问题
方法2:
· NSOperationQueue *queue=[[NSOperation alloc] init]
· [ququ setMaxConcurrentOperationCount:1];//指定能够同时并发执行的操作个数
在执行互斥操纵以前,先检查锁的状态,如果处于“打开”状态,则可继续运行,同时将改状态
为“锁定”;在任务执行完成后,再将状态改为“打开”。这样,只要有一个线程再执行互斥操作,其它线
程检测到锁定状态后,都会被阻塞,从而保证同一时间互斥操纵的唯一性。
NSLock *thlock=[[NSLock alloc] init];
BOOL start;
Void threadMethod { NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
while(start) { [thlock lock];
//互斥操作代码
[thlock unlock]; } [pool release]; }
NSConditionLock是一个条件锁
考虑生产者—消费者的需求,让两个线程来分别扮演生产者和消费者的角色,要协调两个线程,需要一
个信号量,来指示有无商品。在线程执行过程中改变和查看该信号量,即可完成同步。
condition机制可以为线程代码提供保护
Condition包含两种状态:信号态(signaled)和非信号态(non—signaled)。使用condition是这样一 个过程:在线程执行时,会不断检查状态。只有为信号态时,线程会继续;反之,线程会等待
[condition lock];
[thCondition wait];
............
[theCondition unlock];
sleep(3);//设置线程休眠三秒钟
[theCondition lock];
...............
[theCondition signal];
[theCondition unlock];