zoukankan      html  css  js  c++  java
  • 关于多线程的介绍

    线程状态

    一、简单介绍

    介绍:

          线程状态一般分为“运行态”,“就绪态”,“阻塞态”

         运行态:CPU当前在执行当前线程

         就绪态:线程线程处于可调度线程池,随时可能被调度到CPU执行

         阻塞态:线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

         死亡:当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡,线程对象会被销毁


    线程的创建:

     self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

    说明:创建线程有多种方式,这里不做过多的介绍。

    线程的开启:

    [self.thread start];

    线程的运行和阻塞:

    (1)设置线程阻塞1,阻塞2秒

        [NSThread sleepForTimeInterval:2.0];

       

    (2)第二种设置线程阻塞2,以当前时间为基准阻塞4秒

        NSDate *date=[NSDate dateWithTimeIntervalSinceNow:4.0];

        [NSThread sleepUntilDate:date];

    线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)

    线程的死亡:

    当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。

    线程死亡后,线程对象从内存中移除。

     

    线程间通信

    介绍:线程在执行的时候,往往需要通知另外一个线程执行特定的代码,这时就有了线程间通信
     
    在主线程中执行run
          [self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];  

    在指定线程thread执行run

          [self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];

    在当前线程执行run

          [self performSelector:@selector(run) withObject:nil]; 
     
    线程安全
     

    一、多线程的安全隐患

    资源共享

    1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源

    比如多个线程访问同一个对象、同一个变量、同一个文件

    当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题

    示例一:

     

    互斥锁

    互斥锁使用格式

    @synchronized(锁对象) 

     {

         // 需要锁定的代码  

    }

    注意:锁定1份代码只用1把锁,用多把锁是无效的,互斥锁会极大的消耗资源,一般要避免使用互斥锁,也就是避免资源争夺的发生

    IOS开发中的原子和非原子属性的选择

    atomic:线程安全,需要消耗大量的资源

    nonatomic:非线程安全,适合内存小的移动设备

  • 相关阅读:
    力扣Leetcode 3. 无重复字符的最长子串
    力扣Leetcode 21. 合并两个有序链表
    力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了
    力扣Leetcode 面试题56
    力扣Leetcode 33. 搜索旋转排序数组
    力扣Leetcode 46. 全排列
    python123期末四题编程题 -无空隙回声输出-文件关键行数-字典翻转输出-《沉默的羔羊》之最多单词
    深入理解ReentrantLock的实现原理
    深入图解AQS实现原理和源码分析
    Java:CAS(乐观锁)
  • 原文地址:https://www.cnblogs.com/hepingqingfeng/p/5462683.html
Copyright © 2011-2022 走看看