zoukankan      html  css  js  c++  java
  • 关于线程安全中Lock的一些说明

    object obj=new object(); object obj2=new object();

    //锁块1 lock(obj){  // do something... }

    //锁块2 lock(obj){  // do something...  // do something...  // do something... }

    //锁块3 lock(obj2){  // do something...  // do something...  // do something... }

    这里的lock(obj){} 并不是要在代码块执行完之前 锁住obj不让访问 而是锁住代码块的内容 obj只是相当于一个锁标识  在代码块结束之前,不再允许任何线程 访问,带有obj锁标识的代码块. 也就是说在lock代码块没执行完之前,obj是可读可写的,只是... 不能有任何线程再去访问标识为obj的锁里面的代码块.任何加了obj标识的加锁代码块都不允许

    上面代码中 假如锁块1代码没有结束 则锁块2的代码进不去,锁块3的代码能正常进去 (虽然是同一个类型的实例,但必须引用也相同,才会正常加锁,如果实例引用不一致 也不会加锁)

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/xdoudou/p/3059610.html
Copyright © 2011-2022 走看看