美文网首页
多线程知识点

多线程知识点

作者: Yanni_L | 来源:发表于2016-09-12 10:24 被阅读37次

    0708线程

    多线程

    pthread (了解,程序猿几乎不用)

        // 创建线程
        pthread_t pthread;
        /*
        // 执行线程参数
        // thread_t *restrict:线程的地址
        // const pthread_attr_t *restrict
        // void *(*)(void *) 指向函数的指针
        // void *restrict
        pthread_create(pthread_t *restrict, const pthread_attr_t *restrict, void *(*)(void *), void *restrict);
        */
        // 一般会这样写
        // run:指向函数的指针,将需要执行的代码放入指向函数的指针中。
        pthread_create(&thread, NULL, run, NULL);
    
    
    • 例图


      QQ20150721-2@2x.png

    NSThread (掌握)

    • NSThread 创建方式一
    
        // 创建线程
        NSThread *thread = [[NSThread allow] initWithTarget:self selector:@selector(run:) object:@"jack"];
    
        // 线程名称
        thread.name = @"myThread";
    
        // 启动线程
        [thread strat];
    
    
    • 例图


    • NSThread 创建方式二

        // 直接创建线程,调用run方法,参数为rose
        [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"rose"];
    
    
    • 例图


    • 创建方式三

        // 直接创建线程,然后运行,调用run方法,参数为rose
        [NSThread performSelectorInBackground:@selector(run:) withObject:@"jack"];
    
    
    • 例图


    • 线程的状态

    • 使线程延时然后运行之后的程序

    
        // 线程延时两秒运行之后程序
        1.[NSThread sleepForTimeInterval:2];
    
        2.[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
    
        // 延时到遥远的未来
        1.[NSThread sleepUntilDate:[NSDate distantFuture]];
    
        // 直接退出线程
        [NSThread exit];
    
        // 获得当前线程
        NSThread *current = [NSThread currentThread];
    
        // 主线程相关用法
        + (NSThread *)mainThread; // 获得主线程
        - (BOOL)isMainThread; // 是否为主线程
        + (BOOL)isMainThread; // 是否为主线程
    
        // 获取1970年到现在走过的时间
        CFTimeInterval end = CFAbsoluteTimeGetCurrent();
    
        // 获取0时区当前的时间
         NSDate *begin = [NSDate date];
    
    • 例图


    线程的安全

    • 互斥锁使用格式

    • @synchronized(锁对象) { // 需要锁定的代码 }
      注意:锁定1份代码只用1把锁,用多把锁是无效的

    • 互斥锁的使用前提:多条线程抢夺同一块资源

    • 线程同步

    • 线程同步的意思是:多条线程在同一条线上执行(按顺序地执行任务)
      互斥锁,就是使用了线程同步技术

    • 当线程需要访问同一区域的变量时就要考虑线程数据的安全性,使用互斥锁来保证数据的安全性

    • 这里详细说明太罗嗦,直接上代码

    加载网络图片

    • 加载方式二
         // 添加图片网络路径
         NSURL *url = [NSURL URLWithString:@"http://bgimg1.meimei22.com/list/2015-4-23/1/013.jpg"];
    
         // 将文件路径下得图片包装成对象
         NSData *date = [NSData dataWithContentsOfURL:url];
    
         // 将对象转成imget图片
         UIImage *image = [UIImaeg imageVithData:date];
    
         // 再将图片给需要显示的iamgeView
         imageView.image  = imaeg;
    
    
    • 例图


    • 加载方式二

         // 加载图片路径
        NSURL *url = [NSURL URLWithString:@"http://bgimg1.meimei22.com/list/2015-4-23/1/013.jpg"];
    
         // 将图片转成对象
        NSData *date = [NSData dataWithContentsOfURL:url];
    
        UIImage *image = [UIImage imageWithData:date];
    
        // 进入主线程加载图片
        [self.image performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
    
    
    • 例图


    相关文章

      网友评论

          本文标题:多线程知识点

          本文链接:https://www.haomeiwen.com/subject/nbveqttx.html