随笔分类 -  jdk源码分析

摘要:ArrayBlockingQueue 底层以数组的结构存放队列元素,容量大小不可改变。 先看下变量: items:数组,用于存放队列中的元素 takeIndex:获取元素的索引位置 putIndex:存放元素的索引位置 count:队列中当前元素数量 lock:控制队列进出的锁,ArrayBlock 阅读全文

posted @ 2019-06-10 18:15 砌码匠人 阅读(468) 评论(0) 推荐(0)

摘要:申明:jdk版本为1.8 AbstractQueuedSynchronizer是jdk中实现锁的一个抽象类,有排他和共享两种模式。 我们这里先看排他模式,共享模式后面结合java.util.concurrent.locks.ReentrantReadWriteLock单独写一篇随笔。 后面还会分析可 阅读全文

posted @ 2019-05-24 15:08 砌码匠人 阅读(251) 评论(0) 推荐(0)

摘要:LockSupport提供park()和unpark()方法实现线程阻塞和唤醒。底层实现是通过sun.misc.Unsafe的park和unpark。 关于sun.misc.Unsafe的说明请参见我的另外一篇博客。 核心就是通过一个信号量(permit)实现的,0阻塞,1继续执行。 park时可以 阅读全文

posted @ 2019-05-07 18:06 砌码匠人 阅读(161) 评论(0) 推荐(0)

摘要:sun.misc.Unsafe是jdk中为了方便使用java语言灵活操作内存预留的类,由于该类是直接操作内存,所以从java的角度被定义为不安全的,也就是类名的由来。 经常分析jdk源码的同学肯定不陌生,因为jdk中很多地方都用到了这个类。 创建实例:、 sun.misc.Unsafe UNSAFE 阅读全文

posted @ 2019-05-07 17:43 砌码匠人 阅读(398) 评论(0) 推荐(0)

摘要:在阿里编程规约中关于线程池强制了两点,如下: 【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。说明:使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。 阅读全文

posted @ 2019-04-25 18:11 砌码匠人 阅读(250) 评论(0) 推荐(0)

导航