自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 集合与多线程系列-AbstractQueuedSynchronizer(三)

1 Condition接口 // 当前线程在接到信号或被中断之前一直处于等待状态。 void await() throws InterruptedException; // 当前线程在接到信号之前一直处于等待状态 void awaitUninterruptibly(); // 当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。返回值表示剩余时间,如果在nanosTimesout之前唤醒,那么返回值 = nanosTimeout - 消耗时间,如果返回值 <= 0 ,则可以认定它已经超时

2020-07-19 16:12:22 124

原创 集合与多线程系列-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 76

原创 集合与多线程系列-AbstractQueuedSynchronizer(一)

1.简介 AbstractQueuedSynchronizer,简称AQS,采用模板方法设计模式,是实现锁(也可以是任意同步组件)的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。锁是面向使用者,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器是面向锁的实现者,它简化了锁的实现方式,屏蔽了同步状态的管理,线程的排队,等待和唤醒等底层操作。AQS的核心是一个同步队列和一个volatile修饰的状态state。 2.AQS同步队列 AQS内部维护了一个CLH队列,用于管理同步状态及线程排队: sta

2020-07-19 13:42:30 111

原创 集合与多线程系列-TreeMap

1.简介 JDK1.8中TreeMap底层实现采用了红黑树,具有比较好的查询、添加、删除效率,TreeSet底层实现其实也是TreeMap。另外,红黑树在HashMap中也有运用。 2.红黑树 红黑树是一种二叉查找树,比起一般的二叉查找树,它的添加和删除操作后可以通过自平衡,保证整棵树大致平衡(非绝对平衡),极端情况最长路径是最短路径的2倍(最短路径全是黑节点,最长路径全是红黑相间),换句话说,最长路径长度不会大于最短路径的2倍。红黑树的查找、添加、删除操作的时间复杂度都是O(lgn),能很大程度解决一般二

2020-07-15 23:11:10 570

原创 MySQL学习一 MySQL简介

1 MySQL简介 MySQL是一种可移植、单进程多线程架构的关系型数据库,支持插件式的表存储引擎(注意存储引擎是基于表而不是数据库)。 2 MySQL存储引擎 MySQL常见的存储引擎:InnoDB、MyISAM、NDB、Memory、Archive、Federated、Maria等。可以通过SHOW ENGINES语句查看当前使用的MySQL数据库所支持的存储引擎,也可以通过查找infoma...

2020-02-22 11:18:27 203

原创 Java数据结构和算法三 链表

1 链表简介 链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。 2 单链表 单链表的节点分为两个部分,第一个部分保存或者显示关于节点的...

2019-08-18 18:11:54 183

原创 Java数据结构和算法二 队列

1 队列简介 1.1 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。 1.2 在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出线性表。 1.3 队列分为: 1...

2019-07-21 16:05:31 106

原创 Java数据结构和算法一 数组

1 数组简介 2 稀疏数组 2.1 简介 2.2 代码示例 package com.example.array; /** * 稀疏数组 */ public class SparseArray { /** * 将原始二维数组转换为稀疏数组 * 始二维数组 originArray * 0 0 3 0 0 0 * 0 0 0 0 6 0 ...

2019-06-30 12:10:28 315

原创 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 119

原创 Java程序初始化的顺序

java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数等),他们执行的顺序如下:父类静态变量父类静态代码块子类静态变量子类静态代码块父类非静态变量父类非静态代码块父类构造器子类非静态变量子类非静态代码块子类构造器...

2018-06-28 15:34:24 100

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除