关于多线程的结介绍

线程状态

一、简单介绍

介绍:

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

     运行态: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:非线程安全,适合内存小的移动设备

时间: 2024-12-22 03:29:05

关于多线程的结介绍的相关文章

gdb 调试openmp多线程程序 示例介绍

 首先一个简单程序源代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <omp.h> 4 int main(int argc, char * argv[]){ 5 int i, k,m,n; 6 printf("i=%d,threads_num=%d\n",i, omp_get_num_threads()); 7 printf("i=%d,thread_id=%d\n&quo

iOS开发多线程篇—GCD介绍

iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中

iOS多线程技术—GCD介绍

iOS多线程技术—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,

iOS开发多线程篇—GCD介绍 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3806821.html iOS开发多线程篇-GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行

iOS开发多线程篇-GCD介绍

iOS开发多线程篇-GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中

LNMP架构结介绍,MySQL和PHP的安装以及Nginx介绍

一.LNMP架构结介绍 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构.Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi. 详细介绍可参考:http://blog.csdn.net/u013592371/article/details/73729892 二.LNMP架构-安装MySQL LNMP中MySQL的安装步骤与LAMP中安装一样,这里简单写一下安装过程: [email protected]

几种常用有效的线结介绍

在路亚钓的过程中,线结是比较基础的一项技能,正确的使用和绑制一种线结关系到你作钓的成功与否,对于连接路亚的线结目前有很多种绑制方式,但是不是所有的方式都是可靠或优秀的,有因为大家都知道线的拉力磅数一般指的是直线拉力值,但是在线打结后的拉力值会降低不少,如果没有一个有效的线结的话,你打结后的线的拉力值可能会降到原来值的50%甚至更低,那样势必会影响整个线组的强度. 现在就介绍几种比较简便且对钓线本身拉力值损失较小的常见线结供参考,这些线结特别适用于尼龙线或氟碳线. IMPROVED CLINCH

数据字典生成工具之旅(9):多线程使用及介绍

这一篇将在之前的代码生成器上讲解多线程的应用,多线程的概念和好处这里就不多说了,另外从本篇开始后面的实例代码都将放到淘宝的SVN管理工具上维护,大家可以直接使用SVN工具进行下载.好了下面进入本篇内容. 阅读目录 线程的应用 winform程序中的多线程 本章总结 工具源代码下载 学习使用 回到顶部 线程的应用 这里先讲一下线程在Web程序中的一个应用,之前的那一版代码生成器没有考虑表数量多的情形,这里先模拟一下在数据库中创建300张表的情形,下面给出创建表的语句 . --模拟创建300张表,@

iOS开发多线程篇--多线程的简单介绍

一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的串行 1个线程中任务的执行是串行的