美文网首页
多线程知识点

多线程知识点

作者: 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];

  • 例图


相关文章

  • 第35节:Java面向对象中的多线程

    Java面向对象中的多线程 多线程 在Java面向对象中的多线程中,要理解多线程的知识点,首先要掌握什么是进程,什...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • Java_多线程

    1.知识点: 1.介绍多线程2.线程安全 2.知识点的运用: 1.多线程的作用: 发挥多核CPU的优势,充分利用C...

  • AQS简简单单过一遍

    前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍...

  • Java锁机制了解一下

    前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍...

  • Lock锁子类了解一下

    前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍...

  • java多线程学习小案例

    多线程的小练习 需求:实现一次修改一次输出 主要知识点:多线程,同步,等待和唤醒

  • iOS多线程实现方案之 -- GCD

    昨天通过多线程实现方案之 -- NSThread说了关于 NSThread 多线程的一些知识点和用法, 其实之...

  • Java多线程 ----(1)多线程基础

    1、什么是多线程和使用多线程的意义2、多线程基础知识点框架图3、实现多线程的三种方式4、三种方式对比 1、什么是多...

  • 美团十年,我总结的Java核心知识点pdf(Java岗),请查收

    Java核心知识点从多个知识点分析: 包括JVM,Java集合,Java多线程并发,Java基础,spring原理...

网友评论

      本文标题:多线程知识点

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