IOS开发之关键字synchronized
来源:互联网 发布:烟灶套装 知乎 编辑:程序博客网 时间:2024/05/21 06:19
static Config * instance = nil;
+(Config *) Instance {
@synchronized(self) {
if(nil == instance) {
[self new];
}
}
return instance;
}
+(id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if(instance == nil){
instance = [super allocWithZone:zone];
return instance;
}
}
return nil;
}
在上面两个例子中都用到 关键字@synchronized,这里大概说一下
@synchronized,代表这个方法加锁, 相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程例如B正在用这个方法,有的话要等正在使用synchronized方法的线程B运行完这个方法后再运行此线程A,没有的话,直接运行。它包括两种用法:synchronized 方法和 synchronized 块。
@synchronized 方法控制对类(一般在IOS中用在单例中)的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法锁方能执行,否则所属就会发生线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类,至多只有一个处于可执行状态,从而有效避免了类成员变量的访问冲突(只要所有可能访问类的方法均被声明为 synchronized)。
synchronized 块:
@通过 synchronized关键字来声明synchronized 块。语法如下: @synchronized(syncObject) { } synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。 0 0
- IOS开发之关键字synchronized
- IOS开发之关键字synchronized
- IOS开发之关键字synchronized(线程加锁)
- iOS开发过程当中使用@synchronized关键字学习文档(一)
- java之关键字synchronized
- Java关键字之synchronized
- Java关键字之synchronized
- Java关键字之synchronized
- java之synchronized关键字
- iOS开发之属性关键字
- 线程同步之synchronized关键字
- 多线程之synchronized关键字详解
- 线程同步之synchronized关键字
- Java多线程之synchronized关键字
- 老生常谈之 synchronized关键字详解
- JAVA多线程之Synchronized关键字
- Java并发之synchronized关键字
- Java并发之synchronized关键字
- 多线程_线程的状态转换图及常见执行情况
- 获取 url 参数
- 浅谈iOS中MVVM的架构设计与团队协作
- Kubernetes计算资源管理--requests和limits
- 算法随练(斐波那契数列)
- IOS开发之关键字synchronized
- JavaScript—变量提升
- MVVM 介绍
- HDU
- 《webrtc权威指南》 资源
- 【SSH网上商城项目实战12】添加和更新商品功能的实现
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
- 关于Git的几个使用技巧
- 有关opencv的学习(13)—使用固定阈值处理图像