- 博客(5)
- 收藏
- 关注
原创 java并发包-ReentrantLock(四):Condition
ReentrantLock的最后讲一下Condition的使用,之前在Lock接口中,我们看到他有一个newCondition要求子类实现,从而能够实现在某一个条件上等待。(相较于传统的由虚拟机支持的synchronized关键字和wait/notify的组合,它能够选择性的唤醒正确的线程)。 同样根据方法的调用顺序,先来查看ReentrantLock中newCondition的实现是如何返回一个
2017-03-20 23:39:56 479
原创 编译hotspot源码
上学期买了本《深入理解Java虚拟机》,第一章的内容就是编译一份openjdk或者Hotspot,当时觉得有时间就去自己试一下。今天花了一整个下午的时间,终于把这个玩意(Hotspot)给搞定了。自己不去编译一次,不会知道这玩意并不简单,但是也算对Linux下的编译加深了认识,毕竟平时都在Windows平台敲代码,Linux也只有部分实验课用到了。 参考书籍:《深入理解java虚拟机 》《Hots
2017-03-18 00:03:06 4352
原创 java并发包-ReentrantLock(三):如何解锁
(本文源代码来自openjdk1.8,有错误和不足欢迎讨论指正) 看了前面讲述lock工作原理的文章,我们对ReentrantLock的实现方式有了了解。ReentrantLock中由其内部对象sync中的state成员记录其锁状态,当state=0时,代表无线程占用锁,state=n,n代表同一线程对锁的重入次数。lock的逻辑无疑就是尝试将state值从零改为1(占用)或者增加1(重入),否则
2017-03-17 12:20:09 618
原创 java并发包-Reentrantlock(二):tryLock与lockInterruptibly
(本文源代码完全来自openjdk1.8,欢迎对文中内容进行讨论指正)1. lock.lockInterruptibly()上一篇文章揭示了lock.lock()方法的工作原理,它在acquireQueued方法中设置了一个死循环,当线程从阻塞解除时,首先判断线程是否该竞争锁,如果是,则去竞争锁。竞争失败或者其它唤醒方式(如线程被中断)都会导致线程重新阻塞,这意味着lock方法屏蔽了中断,无法对其相
2017-03-15 19:06:57 669
原创 java并发包-ReentrantLock(一):lock()是如何工作的
*(本文源代码来自openjdk8,有错误和不足欢迎讨论指正)*ReentrantLock是java并发包提供的最常用的显示锁,除了实现内置锁的基本功能,还允许实现一些高级功能。ReentrantLock的声明如下:public class ReentrantLock implements Lock, java.io.Serializable {//内容忽略}可以看到它实现了Lock接口与S
2017-03-15 13:03:53 580
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人