zoukankan      html  css  js  c++  java
  • java的锁机制

    1.什么是锁?

    参考博客:https://www.cnblogs.com/hustzzl/p/9343797.html

    本次将提及用到的锁机制:

    独享锁/共享锁

    独享锁是指该锁一次只能被一个线程所持有。

    共享锁是指该锁可被多个线程所持有。

    对于Java ReentrantLock而言,其是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁。

    读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。

    独享锁与共享锁也是通过AQS来实现的,通过实现不同的方法,来实现独享或者共享。

    对于Synchronized而言,当然是独享锁。

    2.锁处理了什么东西?

    就个人理解,锁是将共享资源进行锁住,比如代码块,资源等。

    3.锁的使用

    参考博客:https://www.cnblogs.com/wuhan729/p/8601108.html  

    lock锁使用

    tryLock(long time, TimeUnit unit)方法和tryLock()方法是类似的,只不过区别在于这个方法在拿不到锁时会等待一定的时间,在时间期限之内如果还拿不到锁,就返回false。如果如果一开始拿到锁或者在等待期间内拿到了锁,则返回true。

    所以,一般情况下通过tryLock来获取锁时是这样使用的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Lock lock = ...;
    if(lock.tryLock()) {
         try{
             //处理任务
         }catch(Exception ex){
             
         }finally{
             lock.unlock();   //释放锁
         
    }else {
        //如果不能获取锁,则直接做其他事情
    }

    4.常用锁

    lock

    Synchronized

  • 相关阅读:
    .NET 4.5 is an in-place replacement for .NET 4.0
    python Argparse模块的使用
    linux的fork(), vfork()区别
    Linux 的 strace 命令
    NTFS系统的ADS交换数据流
    Git和.gitignore
    GIT常用命令
    OSChina码云试用
    tcpdump用法
    linux网卡混杂模式
  • 原文地址:https://www.cnblogs.com/setname/p/12790418.html
Copyright © 2011-2022 走看看