Java
文章平均质量分 85
lshwjw
这个作者很懒,什么都没留下…
展开
-
集合与多线程系列-AbstractQueuedSynchronizer(三)
1 Condition接口// 当前线程在接到信号或被中断之前一直处于等待状态。void await() throws InterruptedException;// 当前线程在接到信号之前一直处于等待状态void awaitUninterruptibly();// 当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。返回值表示剩余时间,如果在nanosTimesout之前唤醒,那么返回值 = nanosTimeout - 消耗时间,如果返回值 <= 0 ,则可以认定它已经超时原创 2020-07-19 16:12:22 · 136 阅读 · 0 评论 -
集合与多线程系列-AbstractQueuedSynchronizer(二)
1.共享式获取锁1.1 不响应线程中断 // 步骤1:尝试获取锁 // 步骤2:排队获取锁 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared(arg); } // 步骤1:尝试获取锁,模板方法,具体实现由子类完成 protected int tryAcquireShared(int arg) {原创 2020-07-19 14:41:45 · 89 阅读 · 0 评论 -
集合与多线程系列-AbstractQueuedSynchronizer(一)
1.简介AbstractQueuedSynchronizer,简称AQS,采用模板方法设计模式,是实现锁(也可以是任意同步组件)的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。锁是面向使用者,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器是面向锁的实现者,它简化了锁的实现方式,屏蔽了同步状态的管理,线程的排队,等待和唤醒等底层操作。AQS的核心是一个同步队列和一个volatile修饰的状态state。2.AQS同步队列AQS内部维护了一个CLH队列,用于管理同步状态及线程排队:sta原创 2020-07-19 13:42:30 · 123 阅读 · 0 评论 -
集合与多线程系列-TreeMap
1.简介JDK1.8中TreeMap底层实现采用了红黑树,具有比较好的查询、添加、删除效率,TreeSet底层实现其实也是TreeMap。另外,红黑树在HashMap中也有运用。2.红黑树红黑树是一种二叉查找树,比起一般的二叉查找树,它的添加和删除操作后可以通过自平衡,保证整棵树大致平衡(非绝对平衡),极端情况最长路径是最短路径的2倍(最短路径全是黑节点,最长路径全是红黑相间),换句话说,最长路径长度不会大于最短路径的2倍。红黑树的查找、添加、删除操作的时间复杂度都是O(lgn),能很大程度解决一般二原创 2020-07-15 23:11:10 · 598 阅读 · 0 评论 -
Java程序初始化的顺序
java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数等),他们执行的顺序如下:父类静态变量父类静态代码块子类静态变量子类静态代码块父类非静态变量父类非静态代码块父类构造器子类非静态变量子类非静态代码块子类构造器...原创 2018-06-28 15:34:24 · 110 阅读 · 0 评论 -
Log4j配置文件
示例:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration> <!--输出到控制台--> <appender name="CONSOLE" class="org.a...原创 2019-06-24 14:14:03 · 137 阅读 · 0 评论