博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发之关键字synchronized
阅读量:7095 次
发布时间:2019-06-28

本文共 985 字,大约阅读时间需要 3 分钟。

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 (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。

 

更多

 

 

转载于:https://www.cnblogs.com/yulang314/p/3580481.html

你可能感兴趣的文章
SOM自组织映射网络 教程
查看>>
lintcode:寻找旋转排序数组中的最小值 II
查看>>
树莓派学习笔记——交叉编译练习之SQLite3安装
查看>>
android stuido build 慢的解决办法
查看>>
Appium移动自动化测试(四)--one demo
查看>>
nginx配置location总结及rewrite规则写法
查看>>
python 登陆接口
查看>>
RedHat7 部署ELK日志分析系统
查看>>
DS实验题 Missile
查看>>
微信上 网页图片点击全屏放大
查看>>
jquery获取css颜色值返回RGB应用
查看>>
(void __user *)arg 中__user的作用
查看>>
Redefine:Change in the Changing World
查看>>
POJ 3436 ACM Computer Factory 最大流
查看>>
atitit。全局变量的设计与实现 java php的异同
查看>>
自己定义控件-画板,橡皮擦,刮刮乐
查看>>
spark 按照key 分组 然后统计每个key对应的最大、最小、平均值思路——使用groupby,或者reduceby...
查看>>
顺序表示的线性表——顺序表
查看>>
categorys源码
查看>>
XML学习总结(二)——XML入门
查看>>