1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 2 {
 3     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
 4
 5     //创建线程的第一种方式
 6     NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"universe"];
 7     [thread start];
 8     [thread release];
 9
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 - (void) run:(NSString*)str
78 {
79     NSLog(@"多线程运行:::%@",str);
80 }
81
82 - (void) run2:(NSString*)str
83 {
84     NSLog(@"多线程运行:::%@",str);
85 }
86 这些都是基本的线程创建,用NSThread来进行创建线程比较简单,如果是单一的创建线程可以用NSThread。直接创建可以使用。只需把线程执行的函数和方法写入即可创建一个线程出来。。
87   

View Code

转载于:https://www.cnblogs.com/Wild-orangutans/p/3824366.html

iOS-多线程 ,整理集锦,多种线程的创建相关推荐

  1. 多线程总结:1.线程的创建于开启 2.线程的状态 3.线程安全

    多线程     三高: 高可用  高性能   高并发 thread 类         线程是程序中执行的线程. Java虚拟机允许应用程序同时运行多个执行线程. 多线程:         多任务执行 ...

  2. 多线程进一步的理解------------线程的创建

    public class TestThread1 {public static void main(String[] args) {Thread thread = new Thread(){@Over ...

  3. IOS多线程系统学习之线程同步与线程通信

    多线程编程是有趣的事情,它很容易突然出现"错误情况",这是由于系统的线程调度具有一定的随机性造成的.不过,即使程序偶然出现"错误情况",这是由于系统的线程调度具 ...

  4. iOS多线程各种安全锁介绍 - 线程同步

    一.atomic介绍 github对应Demo:https://github.com/Master-fd/LockDemo 在iOS中,@property 新增属性时,可以增加atomic选项,ato ...

  5. java多线程详解及线程池创建

    多线程 线程 线程是独立的执行路径 在程序执行时,即使自己没有创建线程,后台也会有多个线程 main()称为主线程,为系统的入口,用于执行整个程序 在一个进程中如果开辟了多个线程,线程的运行由调度器安 ...

  6. Java多线程(7)--线程池创建线程

    经常创建和销毁.使用量特别大的资源,比如并发情况下的线程,对性能影响很大. 提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁.实现重复利用. 使用线程池好处: ① ...

  7. 多线程(二)线程的创建和启用

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...

  8. Android开发--初识多线程/线程的创建,开启,休眠,中断

    在Android开发中有一项非常重要的技术---多线程,本文针对线程的创建,开启,休眠和中断做介绍. 如同在JAVA开发中一样,在Android中,提供了两种方法创建线程,一种是通过Thread类的构 ...

  9. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)

    这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...

最新文章

  1. 第十六节,使用函数封装库tf.contrib.layers
  2. python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunca
  3. python if语句多个条件-Python 条件语句(if..elif..else)
  4. python 分班_Python学习作业一
  5. Serverless.com CEO首次访华!探讨无服务器技术落地
  6. 树的存储结构-双亲表示法
  7. 0.8.11版本ffmpeg一天移植将近完成。
  8. *2.3.2_加入env
  9. 我是如何在六个月内学会 Python 的?
  10. python怎么读发音百度翻译-用python实现百度翻译
  11. Richard Hamming - You and Your Research
  12. struts使用拦截器注解
  13. ESP32-CAM 安信可
  14. 20款优秀的数据可视化工具 (建议收藏)
  15. java https双向验证_Https双向验证与Springboot整合测试-人来人往我只认你
  16. python实现决策树 西瓜书_西瓜书学习笔记-决策树
  17. Kafka消费异常报Failing OffsetCommit request since the consumer
  18. Win系统 - Win10 进入 BIOS 系统(非启动快捷键)
  19. 计算机毕业设计Android网约车拼车打车叫车系统APP
  20. Java项目如何统一日志框架?

热门文章

  1. AI将给教育带来巨变,但学校和老师的价值不可替代
  2. linux下samba病毒,Samba 用户模拟漏洞(CVE-2016-2125)
  3. 西瓜书学习记录-神经网络(第五章)
  4. 《程序员面试金典》输出单层节点
  5. java知识百科全书--强烈推荐
  6. DEM挖填方分析--基于水平参考面计算
  7. SQL实战篇:SQL优化问题
  8. 剑指offer 数值的整次方
  9. 说说MaxTenuringThreshold这个参数
  10. Windows Server 2012 新特性:IPAM的配置