IOS多线程之线程的创建

转载 2015年07月09日 15:53:49
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
     
    //创建线程的第一种方式
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"universe"];
    [thread start];
    [thread release];
     
     
    //创建线程的第二种方式,NSThread类方法
    [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"yuzhou"];
     
     
    //创建线程的第三种方法  NSObject方法
    [self performSelectorInBackground:@selector(run:) withObject:@"nsobject thread"];
     
    //创建线程的第四种方式
    NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
    [oprationQueue addOperationWithBlock:^{
        //这个block语句块在子线程中执行
        NSLog(@"oprationQueue");
    }];
    [oprationQueue release];
     
    //第五种创建线程的方式
    NSOperationQueue *oprationQueue1 = [[NSOperationQueue alloc] init];
    oprationQueue1.maxConcurrentOperationCount = 1;//指定池子的并发数
     
    //NSOperation 相当于java中的runnable接口,继承自它的就相当一个任务
    NSInvocationOperation *invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@"invation"];
    [oprationQueue1 addOperation:invation];//将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数
    [invation release];
     
    //第二个任务
    NSInvocationOperation *invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@"invocation2"];
    invation2.queuePriority = NSOperationQueuePriorityHigh;//设置线程优先级
    [oprationQueue1 addOperation:invation2];
    [invation2 release];
     
    [oprationQueue1 release];
     
    //调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走
    [self performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES];
     
    //---------------------GCD----------------------支持多核,高效率的多线程技术
    //创建多线程第六种方式
    dispatch_queue_t queue = dispatch_queue_create("name", NULL);
    //创建一个子线程
    dispatch_async(queue, ^{
        // 子线程code... ..
        NSLog(@"GCD多线程");
         
        //回到主线程
        dispatch_sync(dispatch_get_main_queue(), ^{//其实这个也是在子线程中执行的,只是把它放到了主线程的队列中
            Boolean isMain = [NSThread isMainThread];
            if (isMain) {
                NSLog(@"GCD主线程");
            }
        });
    });
     
     
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
 
- (void)onMain
{
    Boolean b = [NSThread isMainThread];
    if (b) {
        NSLog(@"onMain;;%d",b);
    }
}
 
 
- (void) run:(NSString*)str
{
    NSLog(@"多线程运行:::%@",str);
}
- (void) run2:(NSString*)str
{
    NSLog(@"多线程运行:::%@",str);
}

相关文章推荐

ios - 多线程之八:GCD线程组

在我们的实际开发过程中会碰到这样的问题,只有当任务1和任务2都完成之后才能执行任务3,这种情况下就需要线程组的出现来解决这类问题。常用方法注意事项:使用线程组的方法来创建任务是没有同步任务的,创建按钮...

ios - 多线程之四:线程锁

假如我们在功能的实现过程中,类中有一个全局变量,我们创建了多个线程去同时改变或者使用这个变量,会出现什么问题?线程锁就是用来解决多线程之间对资源共享的问题;思路在上文《多线程之三》的基础之上进行演示,...

Java多线程之线程的创建

好久没有更博客了,最近一直在忙工作的事情。现在终于空下来了,这2天会抓紧时间整理多线程和socket,把JavaSE结束掉。 关于多线程,首先会涉及到哪些东西呢?首先要了解线程,为什么要使用...

C++ Linux 多线程之创建、管理线程

在这个库最重要的一个类就是 boost::thread,它是在 boost/thread.hpp 里定义的,用来创建一个新线程。

Java多线程之线程创建和启动

Java使用Thread类表示线程,所有的线程对象必须是Thread类或其子类的实例,每个线程的作用,实际上就是执行一段程序刘,java使用线程执行体来代表着段程序流创建线程3方法继承Thread类 ...

Java基础:多线程之线程创建的两种方式

创建线程有两种方式: 1. 继承Thread类,覆写run方法; 2. 实现Runnable接口,将任务代码封装到run方法中。

java多线程之实现Runnable接口创建线程

实现Runnable接口创建线程类步骤如下: 1.创建实现Runnable接口的实现类 2.重写Runnable接口的run()方法 3.创建实现类的线程对象 4.将线程对象作为Thread的arge...

多线程之创建工作者线程和用户界面线程区别

多线程之创建工作者线程和用户界面线程区别     1、工作者线程倾向于琐碎的处理,与它不同的是,用户界面线程具有自己的界面而且实际上类似于运行其他应用程序。创建线程而不是其他应用程序...

iOS多线程之NSThread详解

  • 2016-08-22 11:25
  • 99KB
  • 下载

浅析java多线程之线程初使用

1.在学习之前我都会想这个问题,到底什么是线程?我们学习线程有什么用?   线程:其实就是程序执行流的最小单元。但我觉得这样的书面描述不太好理解,我觉得通过举例的方式能更好的加深理解,首先要明白线程,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)