JUC包下同步工具类及Condition队列

在上篇关于从ReentrantLock看JUC中AQS的这篇文章中,留下了一个非常重要的Condition模块,并未去分析。而这个模块,在实现BlockingQueue的过程中,用到了。因此特地回过头来,去补习一下关于Condition的实现与原理、以及JUC下面其他的同步工具类的使用。Condit
阅读更多

Java中的Queue之概述

对技术还是得有敬畏之心,总觉得Queue好像没啥,其实只是没有仔细去了解过。不过自从上次认真地看了线程池的源代码之后,发现Queue是一个很神奇的集合类。Queue的形式有无界、有界,还有堵塞、非堵塞。初略想想,这个实现可能就不简单。一个问题在线程池中,自定义线程池时,放入什么样的队列可以让线程数达
阅读更多

Java中的线程池从精通到入门

说真的,我一直认为线程池很简单,也没去看过它的实现,大概了解过其中的原理,但是并未深入学习。一方面,了解过之后很长时间不去看,非常容易忘;另一方面,还是深入源码得到的信息才会比较深刻,还能避免背书式学习。继承结构说明在Executors中,有几个静态方法,预设了几个ThreadPoolExecuto
阅读更多

JUC源码学习之AbstractQueuedSynchronizer

源码基于的Oracle JDK版本为:11.0.5什么是CLH队列简单理解是一个双向链表,链表中存放的是包含线程在内的信息,队首的是正在执行的线程,后面的是等待执行的线程,如下图所示:Node概述The wait queue is a variant of a "CLH" (Cr
阅读更多

关于String与常量池的问题

面试必问题吧,但是好像还有一个比较容易漏的地方。总体的流程,搞清楚执行此代码后,他们的结果是什么,以及为什么就差不多算理解了。String a1 = new String("ab");System.out.println(a1 == a1.intern());//falseStr
阅读更多

Spring Data Mongo DB去掉插入的_class字段分析

大致的框架是从网上找来的资源。但是遇到了两个问题:运行代码后,MongoDB数据库没有收到改变。想起了在yaml中配置的mongodb参数,那些参数,data的上一层是spring,如下:spring boot在加载这些数据时,会得到一个MongoProperties。按住Ctrl,然后点在那些值上
阅读更多

如何在macOS中编译OpenJDK10源代码

这段时间准备开始学习《深入理解Java虚拟机》,先搭个可以调试的环境出来。按照书中的配置,感觉有许多问题的,这篇文章就用来记录成功编译OpenJDK源代码的一些过程,以及其中的一些配置。配置信息综述系统版本:macOS 10.14 BetaOpenJDK版本:jdk-10+46,TAG链接、zip包
阅读更多

Java中的注解与Spring中的常用注解

在Spring中,有很多的注解,比如@Controller、@Service什么的。之前对注解的了解不够,在使用SSM时,在想到底什么是注解,它的工作原理又是什么或者说它是怎么工作的,为什么注解了之后就能达到某个功能呢?带着这样的一个疑问,开始探索之旅吧!常见的Java内置的注解以及源代码@Over
阅读更多

Java多线程系列(1)对一个多线程同步代码的分析

注意synchronized关键字使用的是实例锁即可。即m1()与m2()是按照某个次序执行,所以在m1()中,一定会输出b = 1000。至于主线程中的输出,则需要考虑执行顺序。package basic.multithread;public class TestSync2 implements
阅读更多