OC-NSTread

每一个线程都可以持有一个该线程固有的NSMutableDictionary类型的字典

创建线程

+(void)datachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

官方解释:对对象aTarget调用方法创建新线程并执行
aSelector必须是仅获取一个id类型参数且返回值为void的执行方法
我觉得应该就是让aTarget对象执行aSelector消息 但是并不是用主线程来执行 而是新创建一个新线程来执行 执行结束后线程随之终止 线程从最初就和父线程分离 会自动创建自动释放池

+(void)datachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument

获取线程

-(NSMutableDictionary*)threadDictionary 获取线程的字典

中断线程

+(void)sleepForTimeInterval:(NSTimeInterVal)ti 使线程中断几秒

+(void)sleepUntilDate:(NSDate*)aDate

执行依赖(没懂)

-(void)performSelectorOnMainThread:(SLE)aSelector withObject:(id)arg waitUntiDone:(BOOL)wait

选择器aSelector和参数arg中指定的方法的执行依赖于主线程。wait为YES时 当前线程会一直等待值执行接受 主线程中必须有runloop

NSLock

NSLock*countLock = [[NSLock alloc]init];
[countLock lock];
//[countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠
[countLock unlock];
[countLock tryLock];//尝试获得锁 如果可以则返回YES 如果不能并不会进入休眠 而是直接返回NO 并且继续执行下面的代码 

NSConditionLock 条件锁

就是这个锁在初始化的时候会设置一个condition值 这个就相当于密码 只有你在调用这个锁的时候带着相同的condition才能使用锁

-(id)initWithCondition:(NSInteger)condition 初始化

-(NSInteger)condition 返回锁中设定的值

-(void)lockWhenCondition:(NSInteger)condition

如果锁在使用:则线程进入休眠
如果锁不在使用 :
1.如果这个condition值和锁的condition值一样 则可以使用这个锁 就是正常的使用锁
2.如果condition不一致 则进入休眠

-(void)unlockWithCondition:(NSInteger)condition

这个没懂 是只有值相同的才能解锁吗 还是什么意思

-(BOOL)tryLockWithCondition:(NSInteger)condition

一样 就是加个条件 值要一样

NSRecursiveLock 拥有锁的线程重复获得锁也不会休眠

//主要是避免这个情况
NSLock*countLock = [[NSLock alloc]init];
[countLock lock];
[countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠

//这样就不会
NSRecursiveLock*countLock = [[NSRecursiveLock alloc]init];
[countLock lock];
[countLock lock];//同样 此时其他进程是没办法获得这个锁的 会进入休眠 唯一缺点可能就是性能没那么好

@ synchronized(没咋看)

@synchronized(obj)
{
	//记述想要排斥的内容
}

运行时会自动创建执行该段代码块的锁(mutex)
obj通常指定为该互斥锁要保护的对象 obj自己不需要是锁的对象

同一个obj的@synchronized块如果有多个 则不可以同时执行

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...