锁总结

  1. synchronized(同步锁)
    (1)使用Object的wait()和notify()方法可以控制锁的等待与唤醒

  2. ReentrantLock(重入锁)
    (1)tryLock()方法可以防止死锁
    (2)lockInterruptibly()响应中断
    (3)Condition的await()和signal()方法类似Object的wait()和notify()方法

  3. Semaphore(信号量)
    (1)允许多个线程同时访问(多个许可)
    (2)使用acquire()和release()获取或释放一个许可

  4. ReadWriteLock(读写锁)
    (1)使用方法

    ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    Lock readLock = readWriteLock.readLock();
    Lock writeLock = readWriteLock.writeLock();
    //然后给读取操作加读锁,给写操作加写锁
    

    (2)约束情况,只有读读是非阻塞的,读写、写读、写写都是阻塞的

    非阻塞阻塞
    阻塞阻塞
  5. mysql lock
    获取锁:select get_lock(‘key’, 100) from dual;
    释放锁:select release_lock(‘key’) from dual;
    这种锁的优点是,如果我们只有一个数据库,可以使用这种方式给分布式应用加锁,而且这个锁如果客户端断线了会自动释放,不会导致无限等待。可以参考博主另一篇文章http://blog.youkuaiyun.com/tangtong1/article/details/51792617


欢迎关注我的公众号“彤哥读源码”,查看更多“源码&架构&算法”系列文章, 与彤哥一起畅游源码的海洋。

qrcode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值