1,pthread_create
(unix自带的线程创建, 不多说,都知道, 比较少用)
2,nsthread
优点:NSThread 比其他两个轻量级。
缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销
两种方式创建:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
[thread start]; //要手动去start开启线程
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument //会自动开启线程
3,performSelectorInBackground:withObject: 来创建一个线程
[self performSelectorInBackground:@selector(run:) withObject:@"test"]; //在后台运行某一个方法
其效果与 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一样的。
4,nsoperation (NSInvocationOperation 和 NSBlockOperation)
NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行,我们会把我们的执行操作放在NSOperation中main函数中。
nsoperation的子类要支持并发执行的话并,需要重载如下4个方法(默认不是并发的)
//执行任务主函数,线程运行的入口函数
-(void)start
//是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放。
(BOOL)isFinished
5,GCD
dispatch queue分为下面三种:1,Serial
又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。
2,Concurrent
又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。
3,Main dispatch queue
它是全局可用的serial queue,它是在应用程序主线程上执行任务的。