小编在此之前,通过一个小例子,简单的形容了一下进程与线程之间的关系,现在网络编程中的多线程说一下!!!
*进程的基本概念
每一个进程都是一个应用程序,都有自己独立的内存空间,一般来说一个应用程序存在一个进程,但也有多个进程的情况;
同一个进程中的线程共享内存中内存和资源。
*线程的基本概念
每一个程序都有一个主线程,程序启动时创建(调用main来启动)。主线程的生命周期是和应用程序绑定的,程序退出(结束)时,主线程也就停止了。多线程技术表示,一个应用程序都多个线程,使用多线程能提供CPU的使用率,防止主线程堵塞。任何有可能堵塞主线程的任务不要在主线程中执行。
########################创建多线程的方法#########################
//第一种创建方法
NSThread *mainThread = [[NSThread alloc]initWithTarget:self selector:@selector(mutableThread:) object:nil];
[mainThread start];
//第二种创建方式
[NSThread detachNewThreadSelector:@selector(mutableThread:) toTarget:self withObject:nil];
//第三种创建方式
[self performSelectorInBackground:@selector(mutableThread:) withObject:nil];
//第四种创建方式
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
[operationQueue addOperationWithBlock:^{
for (int i = 0; i <= 100; i++) {
NSLog(@"------这是duo线程1----%d",i);
}
}];
//第五种创建方式
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
//设置线程进行的并发数
operationQueue.maxConcurrentOperationCount = 5;
NSInvocationOperation * invocationQperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(mutableThread:) object:nil];
//将线程添加到线程队列中
[operationQueue addOperation: invocationQperation];
备注:
1、假设主进程里面有3个线程,分别是1、2、3,如何先让线程2先执行呢?
在多线程中,各线程之间,可以根据线程之间的优先级来进行设置。
共有五个优先级:
NSOperationQueuePriorityVeryLow = -8L;
NSOperationQueuePriorityLow = -4L;
NSOperationQueuePriorityNormal = 0;
NSOperationQueuePriorityHigh = 4;
NSOperationQueuePriorityVeryHigh = 8
2、UI的操作都是在主线程上运行的。那如何从其他线程跳转到主线程呢?
通过设计的方法来进行线程之间的跳转:
[self performSelectorOnMainThread:@selector(mainThread) withObject:self waitUntilDone:YES];
3、NSThread的常用方法
//获取当前线程对象
+ (NSThread *)currentThread;
//判断当前线程是否是多线程
+ (BOOL)isMultiThreaded;
//是当前线程睡眠指定的时间,单位为秒
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
//退出当前线程
+ (void)exit;
//判断当前线程是否为主线程
+ (BOOL)isMainThread;
//启动该线程
- (void)start
小编希望和各位大牛一起探讨,并希望大牛指正!!!!!
原文:http://www.cnblogs.com/Bob-tong/p/4488874.html