单例
来源:互联网 发布:怎么在淘宝上删除评价 编辑:程序博客网 时间:2024/04/28 02:18
// 单列模式
static CustomAddressBook *instance;
+ (CustomAddressBook*)shareControl{
@synchronized(self) {
if(!instance) {
instance = [[CustomAddressBookalloc] init];
}
}
returninstance;
}
解释:
@synchronized,代表这个方法加锁, 相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程例如B正在用这个方法,有的话要等正在使用synchronized方法的线程B运行完这个方法后再运行此线程A,没有的话,直接运行。它包括两种用法:synchronized 方法和 synchronized 块。
@synchronized 方法控制对类(一般在IOS中用在单例中)的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法锁方能执行,否则所属就会发生线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类,至多只有一个处于可执行状态,从而有效避免了类成员变量的访问冲突(只要所有可能访问类的方法均被声明为 synchronized)。
synchronized 块:
@通过 synchronized关键字来声明synchronized 块。语法如下: @synchronized(syncObject) { } synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。 0 0
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- 单例
- tcp三次握手和四次挥手
- apache activemq Failed to bind to server socket 61616
- android4.3 解压、打包boot.img新脚本
- UIScrollView + UIPageControl的使用
- EF学习笔记——通用增删改查方案
- 单例
- ERROR 1366 (HY000): Incorrect string value: '\xE4\xB8\x8D\xE5\xA5\xBD' for column 'description' at r
- Java静态的定义
- Longest Common Prefix LeetCode :Mysolution
- Hibernate中数据的三种状态转换
- 英文自我介绍
- android上的缓存、缓存算法和缓存框架
- Leetcode-Remove Duplicates from Sorted List II
- Android中自定义View的MeasureSpec使用