线程状态
一、简单介绍
介绍:
线程状态一般分为“运行态”,“就绪态”,“阻塞态”
运行态: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];
线程处理阻塞状态时在内存中的表现情况:(线程被移出可调度线程池,此时不可调度)
线程的死亡:
当线程的任务结束,发生异常,或者是强制退出这三种情况会导致线程的死亡。
线程死亡后,线程对象从内存中移除。
线程间通信
在指定线程thread执行run
在当前线程执行run
一、多线程的安全隐患
资源共享
1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
比如多个线程访问同一个对象、同一个变量、同一个文件
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题
示例一:
互斥锁使用格式
@synchronized(锁对象)
{
// 需要锁定的代码
}
注意:锁定1份代码只用1把锁,用多把锁是无效的,互斥锁会极大的消耗资源,一般要避免使用互斥锁,也就是避免资源争夺的发生
IOS开发中的原子和非原子属性的选择
atomic:线程安全,需要消耗大量的资源
nonatomic:非线程安全,适合内存小的移动设备