【每日系列】
文章平均质量分 79
高级摸鱼工程师
对技术有兴趣 对业务有想法
展开
-
SPI : ServiceLoader如何打破双亲委派
JDK的SPI是怎么打破双亲委派的?原创 2022-08-28 21:28:41 · 705 阅读 · 1 评论 -
SPI : Service Provider Interface
jdk6中引入了一个新特性,使得我们可以根据一个指定的「接口」去找到并加载指定的「实现」。本篇文章会详细介绍下SPI的用法及场景。原创 2022-08-26 13:45:29 · 383 阅读 · 0 评论 -
『每日一问』LockSupport怎么实现线程等待、唤醒
wait/notify实现线程通信实现线程通信呢,比较传统的办法就是使用synchronized关键字获取对象锁之后,结合Object自带的wait/notify方法来实现。一个简单例子如下: public static void main(String[] args) throws InterruptedException { ObjectTar objectTar = new ObjectTar(); new WaitThread("WaitThread", obj原创 2020-06-30 22:34:56 · 476 阅读 · 0 评论 -
『每日一问』ReentrantLock加锁解锁
Lock接口中有六个方法void lock();void lockInterruptibly() throws InterruptedException;Condition newCondition();boolean tryLock();boolean tryLock(long time, TimeUnit unit) throws InterruptedException;void unlock();加锁ReentrantLock.lockpublic void lock() .原创 2020-06-29 14:44:42 · 263 阅读 · 0 评论 -
『每日一问』怎么实现一个正确的双重检查锁定
缘由我们程序里,有时候一些开销比较大的对象创建,往往不会提前创建,而是只有在实际要用到的时候才会去创建。也就是基本下边这个写法:public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instance == null) // 1:A线程执行 instance = new Instance();原创 2020-05-30 22:27:23 · 411 阅读 · 0 评论 -
『每日一问』volatile干嘛的
内存语义volatile写:当写一个volatile变量的时候,JMM会把这个线程的本地内存中的共享变量全部刷新到主内存。注意,是全部,而不是仅仅volatile变量volatile读:当读一个volatile变量的时候,JMM会将这个线程的本地内存置为无效,然后从主内存中读取共享变量。以上两步一起来看的话,读线程在读一个volatile变量的时候,写线程在写这个volatile变量之前的所有对共享变量的操作都会立即变得对读线程可见。内存语义的实现之前说到过,重排序分为编译器和处理器重排两种。为了原创 2020-05-27 16:22:38 · 259 阅读 · 0 评论 -
『每日一问』简单聊聊JMM/说说对JMM的了解
JMM流水线原创 2020-05-27 13:06:08 · 580 阅读 · 0 评论