
Java基础
文章平均质量分 79
JDK源码分析
bluesnail95
不以物喜,不以己悲。
展开
-
基于ThreadPoolExecutor实现动态线程池
基于ThreadPoolExecutor实现动态线程池,实现动态修改核心线程数和最大线程数。线程池运行过程,将线程池配置和线程执行日志记录到数据库表。原创 2023-07-30 14:25:04 · 643 阅读 · 0 评论 -
JDK15源码(五):await和signal
await和signal方法使用await和signal方法是基于ReentrantLock的Condition使用的。并且await方法要先于singnal,否则await方法会一直阻塞该线程。lockA线程调用ReentrantLock实例的lock方法占用锁,再调用Condition实例的await方法释放锁挂起线程;2秒后,lockB线程调用ReentrantLock实例的lock方法占用锁,再调用Condition实例的signal方法将lockA放在同步队列中,lockB调用unlock方法释原创 2021-02-12 09:06:40 · 482 阅读 · 1 评论 -
JDK15源码(四):ReentrantLock
Java对象布局输出结果:object header指的是对象头,占了12个字节。double变量是8个字节,hotspot vm 的自动内存管理系统要求对象起始地址必须为8 字节的整数倍,即对象的大小必须是 8 字节的整数倍。因此,当对象实例数据部分没有对齐时,此时需要对齐填充来补齐。无锁、偏向锁、轻量级锁、重量级锁、GC标记...原创 2021-01-20 20:42:59 · 185 阅读 · 0 评论 -
JDK15源码(三):CountDownLatch
class CountDownLatchThread extends Thread { private CountDownLatch countDownLatch; public CountDownLatchThread(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } public void run() { System.out.printl原创 2021-01-17 23:03:34 · 128 阅读 · 0 评论 -
JDK15源码(二):ConcurrentHashMap(插入元素、初始化、扩容、计数、树化)
static class Segment<K,V> extends ReentrantLock implements Serializable { private static final long serialVersionUID = 2249069246763182397L; final float loadFactor; Segment(float lf) { this.loadFactor = lf; }}原创 2020-12-30 23:33:43 · 798 阅读 · 1 评论 -
JDK15源码(一):HashMap
HashMap设置的常量/** * 初始化容量大小,必须是2的N次方数 */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * HashMap容量的上限,必须小于等于2的30次方 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * 当构造函数没有指定加载因子时,默认的加载因子是0.75 */ stati原创 2020-12-20 09:22:51 · 248 阅读 · 1 评论 -
源码解析Executors.newFixedThreadPool(int)
1.Executors.newFixedThreadPool(int nThreads):创建一个线程池,具有固定线程数,运行在共享的无界队列中。在大多数时候,线程会主动执行任务,当所有的线程都在执行任务时,有新的任务加入进来,就会进入等待队列(可以有源源不断的任务加入进来,因为是无界队列),当有空闲的线程,等待队列中的任务就会被...原创 2018-03-31 00:00:00 · 376 阅读 · 0 评论 -
关于同一账号多人同时登录的token重复问题
最近在项目上遇到了一个同一账号多终端(或者说多用户)同时登录导致的token重复问题。可以在浏览器相应地做一些防止表单重复提交的操作,比如登录按钮点击一次后变成不可点击的状态,等待服务器的响应之后再恢复成点击状态。不过这也并不能解决同一账号多终端登录的问题。https://github.com/bluesnail9...项目中...原创 2018-06-18 00:00:00 · 5481 阅读 · 0 评论 -
Java并发:整理自《Java并发编程实战》和《Java并发编程的艺术》
声明:Java并发的内容是自己阅读《Java并发编程实战》和《Java并发编程的艺术》整理来的。图文并茂请戳思维导图下载请戳目录(1)基础概念(2)线程(3)锁(4)同步器(5)并发容器和框架(6)Java并发工具类(7)原子操作类(8)Executor框架(执行机制)(9)其他(一).基础概念1.可见性和原子性可见性:一个线程...原创 2018-05-27 19:31:56 · 1811 阅读 · 0 评论 -
JDK8源码阅读之File(一)
介绍File的一些概念,File的构造函数,File的路径是如何访问和操作的,以及File属性的访问。翻译 2017-11-18 15:18:59 · 1805 阅读 · 3 评论 -
二进制,十进制,八进制,十六进制的相互装换
二进制,十进制,八进制,十六进制的转换,Java实现原创 2017-05-27 20:32:20 · 544 阅读 · 0 评论 -
JDBC实现调用ORACLE存储过程
JDBC实现调用存储过程。以及JDBC的一些介绍。原创 2017-06-07 00:06:48 · 2871 阅读 · 0 评论 -
JDK文档阅读之Using Custom Socket Factories with Java RMI
Java 远程方法调用(RMI)如何创建自定义Socket工厂实现客户端和服务端的通信?自定义Socket工厂可以控制地址的绑定,连接的建立,传输数据的编码(如加密和压缩)。对比自定义和原始的,基本的原理依然是服务器创建存根代理,并且绑定在注册表,客户端在注册表寻找具体名称的远程对象存根引用,拿到引用后,调用远程对象方法。翻译 2017-09-23 10:43:26 · 356 阅读 · 0 评论 -
JDK文档阅读之RMI(远程方法调用)
JDK文档阅读,RMI(远程方法调用)可以实现调用不同主机的服务。服务器在发布一个远程方法时,会在注册表绑定服务名称,客户端注册表的lookup方法查找服务器注册表上某个名称的远程对象,获得远程对象引用,然后调用远程方法。翻译 2017-09-18 20:31:01 · 1013 阅读 · 0 评论 -
jdk8文档阅读之java.io
java.io通过数据流,序列化和文件系统提供系统输入与输出。翻译 2017-10-10 19:28:05 · 497 阅读 · 0 评论 -
Jdk8源码阅读之InputStream
jdk8源码阅读:对InputStream定义的常量和方法进行翻译解读。翻译 2017-10-29 14:45:14 · 1770 阅读 · 0 评论 -
jdk8源码阅读之Serializable
jdk源码Serializable接口翻译。Serializable接口仅仅是用来标识一个类是序列化的。翻译 2017-11-18 14:26:34 · 1917 阅读 · 0 评论 -
JDK8源码阅读之File(二)
jdk源码File阅读翻译翻译 2017-12-10 18:51:51 · 525 阅读 · 0 评论 -
Stack源码解析及用LinkedList实现Stack
Stack源码分析及用LinkedList实现Stack原创 2017-05-25 20:57:16 · 849 阅读 · 0 评论