重入锁ReentrantLock

1|01.重入锁和synchronized比较

特征 synchronized reentrantLock
底层原理 JVM实现 JDK实现
性能区别 低->高(JDK5+)
锁的释放 自动释放(编译器保证) 手动释放(finally保证)
编码程度 简单 复杂
锁的粒度 读写不区分 读锁、写锁
高级功能

公平锁、非公平锁唤醒

Condition分组唤醒

中断等待锁

2|02.代码

public static int users = 100; public static int downTotal = 50000; public static int count = 0; private static ReentrantLock lock = new ReentrantLock(); public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); final Semaphore semaphore = new Semaphore(users); for (int i = 0; i < downTotal; i++) { executorService.execute(new Runnable() { @Override public void run() { try { semaphore.acquire(); add(); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("下载总数为:"+count); } private static void add() { lock.lock(); try { count++; } finally { lock.unlock();//一定要放在finally中,防止死锁 } }

 


__EOF__

本文作者blanset
本文链接https://www.cnblogs.com/blanset/p/16785852.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   求道之愚者  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示