zoukankan      html  css  js  c++  java
  • 关键字@synchronized

    ----------------------  关于关键字@synchronized 原http://blog.csdn.net/sanpintian/article/details/8139635  ---------------------

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

    -------------------------------------------  关于iOS的消息传递—— performSelector  -------------------------------------------

    Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。

  • 相关阅读:
    网络检查思路和步骤
    查看网络状态
    【Linux常见命令】lsof命令
    【Linux常见命令】ip命令
    【Linux常见命令】ifconfig命令:配置与查看网络信息
    【Linux常见命令】netstat命令
    Java-MD5
    Java发送邮件
    Maven基础02
    Maven基础01
  • 原文地址:https://www.cnblogs.com/xs514521/p/6277804.html
Copyright © 2011-2022 走看看