zoukankan      html  css  js  c++  java
  • java lock锁住特定对象

    由于lock没有锁住特定对象的概念,该如何做到像synchronized同步块一样的效果呢?

    答案:为每一个需要加锁的对像分配一把锁。

    示例:

    List<User> users = new ArrayList<>();
    
    //同步某个对象
    synchronized (users.get(0)) {
        
        //do something sync  
    }
    
    //同步某个对象对应的锁
    users.get(0).lock.lock(); //加锁同步
    try {
    
         //do something sync
    }finally {
         users.get(0).lock.unlock();  //解锁
    }
    
    class User{
    
            /**
             * 给user对象分配一把锁
             */
            public Lock lock = new ReentrantLock();
    
            public int id;
    
            public String name;
    
    }

     效率对比(机器:macOs10.12.5,i5处理器,8G内存)

    //  thread_count  synchronized    lock
    // 10 1-2ms 2-3ms
    // 100 8-12ms 7-12ms
    // 1000 68-94ms 64-85ms
    // 10000 642-713ms 687-773ms
    // 100000 5500ms 5600ms
    // 1000000 54s 52s
    可以看出效率几乎一样!所以,如果必须使用lock的情况下才使用它,否则还是synchronized关键字好,简单易懂。
  • 相关阅读:
    乱码问题
    play之路由 routes
    delphi之http通讯
    delphi之socket通讯
    Delphi之ComboBox
    delphi 常用函数
    字节
    EXCEPT
    V_REPORT_AOC_FUEL]
    相同表结构不同记录
  • 原文地址:https://www.cnblogs.com/hdwang/p/8608665.html
Copyright © 2011-2022 走看看