您的位置:首页 > 其它

多线程的几中创建方法与基本使用

2014-02-21 16:01 435 查看
- (
BOOL
)application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
02
{
03
self.window
= [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
04
 
05
//创建线程的第一种方式
06
NSThread
*
thread
=
[[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@
"universe"
];
07
[
thread
start];
08
[
thread
release];
09
 
10
 
11
//创建线程的第二种方式,NSThread类方法
12
[NSThread
detachNewThreadSelector:@selector(run:) toTarget:self withObject:@
"yuzhou"
];
13
 
14
 
15
//创建线程的第三种方法
NSObject方法
16
[self
performSelectorInBackground:@selector(run:) withObject:@
"nsobject
thread"
];
17
 
18
//创建线程的第四种方式
19
NSOperationQueue
*oprationQueue = [[NSOperationQueue alloc] init];
20
[oprationQueue
addOperationWithBlock:^{
21
//这个block语句块在子线程中执行
22
NSLog(@
"oprationQueue"
);
23
}];
24
[oprationQueue
release];
25
 
26
//第五种创建线程的方式
27
NSOperationQueue
*oprationQueue1 = [[NSOperationQueue alloc] init];
28
oprationQueue1.maxConcurrentOperationCount
= 1;
//指定池子的并发数
29
 
30
//NSOperation
相当于java中的runnable接口,继承自它的就相当一个任务
31
NSInvocationOperation
*invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@
"invation"
];
32
[oprationQueue1
addOperation:invation];
//将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数
33
[invation
release];
34
 
35
//第二个任务
36
NSInvocationOperation
*invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@
"invocation2"
];
37
invation2.queuePriority
= NSOperationQueuePriorityHigh;
//设置线程优先级
38
[oprationQueue1
addOperation:invation2];
39
[invation2
release];
40
 
41
[oprationQueue1
release];
42
 
43
//调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走
44
[self
performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES];
45
 
46
//---------------------GCD----------------------支持多核,高效率的多线程技术
47
//创建多线程第六种方式
48
dispatch_queue_t
queue = dispatch_queue_create(
"name"
,
NULL);
49
//创建一个子线程
50
dispatch_async(queue,
^{
51
//
子线程code... ..
52
NSLog(@
"GCD多线程"
);
53
 
54
//回到主线程
55
dispatch_sync(dispatch_get_main_queue(),
^{
//其实这个也是在子线程中执行的,只是把它放到了主线程的队列中
56
Boolean
isMain = [NSThread isMainThread];
57
if
(isMain)
{
58
NSLog(@
"GCD主线程"
);
59
}
60
});
61
});
62
 
63
 
64
self.window.backgroundColor
= [UIColor whiteColor];
65
[self.window
makeKeyAndVisible];
66
return
YES;
67
}
68
69
-
(
void
)onMain
70
{
71
Boolean
b = [NSThread isMainThread];
72
if
(b)
{
73
NSLog(@
"onMain;;%d"
,b);
74
}
75
}
76
77
78
-
(
void
)
run:(NSString*)str
79
{
80
NSLog(@
"多线程运行:::%@"
,str);
81
}
82
-
(
void
)
run2:(NSString*)str
83
{
84
NSLog(@
"多线程运行:::%@"
,str);
85
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: