自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发笔记 (16)------ Executor

文章目录Executor 框架介绍1. 两级调度模型2. Executor框架3. Executor成员1. FixedThreadPool在这里插入图片描述2.SingleThreadExecutor3. CachedThreadPool4. ScheduledThreadPoolExecutor Executor 框架介绍 1. 两级调度模型 由上面这张图片可以看出: 上层:Java多线程程序通常把应用分解为若干个任务,Executor框架)将这些任务映射为固定数量的线程 底层:操作系统内核将这些线

2020-05-28 17:46:34 183

原创 LRU详解+实现

文章目录LRU缓存1.简述LRU2. 实现LRU3. 实现代码 LRU缓存 自测链接 1.简述LRU 这里使用一张图进行描述 示例使用的 capicity 为 3,进入顺序为 7 0 1 2 0 3 0 4 2. 实现LRU 设计需求: 获取数据 get(key) : 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value): 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该

2020-05-25 10:34:00 2441

原创 Java并发笔记 (15)------ Java 线程池

文章目录Java 线程池1. 实现原理2. 线程池使用3. 向线程池提交任务4. 关闭线程池 Java 线程池 使用线程池的好处: 降低资源消耗:重复利用已创建的线程 提高响应速度:不需要线程创建的时间 提高线程的管理性:通过线程池,可以对线程进行同意分配调度 1. 实现原理 线程池处理流程如下图所示: 过程描述: 线程池判断核心线程池里的线程是否都在执行任务 过程 1 如果不是,则创建一个新的工作线程来执行任务。 如果不是,则进入下个流程。 线程池判断工作队列是否已经满。过程 2 如果阻

2020-05-24 21:27:47 135

原创 Java并发笔记 (15)------ 并发工具类

文章目录1. CountDownLatch2. 同步屏障 CyclicBarrier1.简介2. 应用场景3. Semaphore 1. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 可以等价于下面的代码: public class joinCountDown { public static void main(String[] args) throws InterruptedException { Thread parser1

2020-05-23 14:11:11 155

原创 Java并发笔记 (14)------ 阻塞队列

文章目录阻塞队列1.简述2. Java的阻塞队列2.1 ArrayBlockingQueue(FIFO,有界)2.2 LinkedBlockingQueue(FIFO,有界)2.3 PriorityBlockingQueue(优先队列)2.4 DelayQueue(无界)2.5 SynchronousQueue(FIFO)2.6 LinkedBlockingDeque3. 实现原理 阻塞队列 1.简述 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方

2020-05-22 22:16:12 155

原创 Java并发笔记 (13)------ java 高并发容器

文章目录Java并发容器一、ConcurrentHashMap为什么要用ConcurrentHashMap?1. HashMap的线程不安全2. HashTable 效率低下源码分析1.我们先看一下`jdk1.6`结构图及分析:2. jdk 1.8二、 ConcurrentLinkedQueue结构分析源码分析 Java并发容器 吐槽一下:面试前真要准备好源代码分析,看源码真的是一种享受! 一、ConcurrentHashMap 为什么要用ConcurrentHashMap? 1. HashMap的线程不安

2020-05-18 22:25:46 149

原创 python---正则表达式

文章目录正则表达式1.模块内容2.正则表达式对象3.示例 正则表达式 最近学到了python的正则表达式,通过规则和例子来描述这个玩意 首先介绍一下规则,如下表所示: 模式 描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾。 . 匹配任意字符,除了换行符。 […] 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’ [^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 * 匹配0个或多个的表达式。 + 匹配1个或多个的表达式。

2020-05-18 13:03:35 67

原创 递归翻转数组

K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节

2020-05-16 14:55:50 620

原创 Java并发笔记 (12)--- Condition与LockSupport 剖析

文章目录Condition1. Condition接口与示例2. Condition的实现方式1. 等待队列2. 等待3. 通知补充:LockSupport Condition 任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,以实现等待/通知模式。 Condition接口也提供了类似Object的监视器方法,与L

2020-05-15 13:04:12 239

原创 Java并发笔记 (11)--- 读写锁

文章目录1. 接口2. 源码层次分析读写锁1. 读写状态的设计2. 写锁的获取与释放3. 读锁的获取与释放4. 锁降级 1. 接口 ReadWriteLock 定义了读锁与写锁的两个方法,readLock()和writeLock()方法,其实现为ReentrantReadWriteLock public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable 我们看一下ReadWriteLock

2020-05-14 17:44:01 267 1

原创 动态规划 --- 购买股票的最佳时机

文章目录[leetcode123]购买股票的最佳时机 [leetcode123]购买股票的最佳时机 题目链接:[leetcode123] 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [3,3,5,0,0,3,1,4] 输出: 6 解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 =

2020-05-12 09:29:15 191

原创 Java并发笔记 (10)---- ReentrantLock

文章目录重入锁(ReentrantLock)1. 实现重新进入2. 公平与非公平获取锁的区别 重入锁(ReentrantLock) 就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 ReentrantLock虽然没能像synchronized关键字一样支持隐式的重进入,但是在调用lock()方 法时,已经获取到锁的线程,能够再次调用 lock() 方法获取锁而不被阻塞。 下面将着重分析ReentrantLock是如何实现重进入和公平性获取锁

2020-05-11 22:25:15 103

原创 AQS源码分析 ---- 2

文章目录3)共享式同步状态获取与释放4) 独占式超时获取同步状态 3)共享式同步状态获取与释放 与独占式获取最主要的区别:能否有多个线程同时获取到同步状态 上图,左半边表示共享式访问数据,后边为独占式访问数据。 通过调用同步器的acquireShared(int arg)方法可以共享式地获取同步状态 public final void acquireShared(int arg) { if (tryAcquireShared(arg) < 0) doAcquireShared

2020-05-09 22:38:59 131

原创 AQS源码分析 ---- 1

1) 同步队列 同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。 下面直接呈上源代码!!!字多看的头疼 同步队列中的节点(Node): static final class No...

2020-05-03 22:35:32 143

原创 Java并发笔记 (9)---- AQS示例

文章目录队列同步器的接口与示例 队列同步器 AbstractQueuedSynchronizer(以下简称A.Q.S),是用来构建锁或者其他同步组 件的基础框架。 同步器是实现锁(也可以是任意同步组件)的关键 锁是面向使用者的,它定义了使用者与锁交互的接口 同步器面向的是锁的实现者,它简化了锁的实现方式 队列同步器的接口与示例 同步器的设计是基于模板方法模式的 重写同步器指定的方法时,需要使用...

2020-05-03 22:30:55 383

原创 Java并发笔记 (8)---- Lock

锁 锁是用来控制多个线程访问共享资源的方式。 在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增 了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功 能。 区别: 缺少了(synchronized)隐式获取释放锁的便捷性。 拥有了锁获取与释放的可操作性、可中断的获取锁以及超时...

2020-05-03 21:05:41 115

原创 前缀树解析

前缀树 1. 介绍 首先用一张图来描述一下: 以 包含‘A-Z’ 的前缀树为例 从图中可以看出,前缀树是个树状结构,从root结点出发,如果遇到一个字符X,则下移到该字符对应的子节点中。 说到这里有点疑惑,数据结构到底是什么样子的? class Trie{ boolean isEnd; // 如果 isEnd 说明从根节点到此节点之间的路径,为一个预先插入的单词 // 当然这...

2020-05-02 12:29:47 227

原创 Java并发笔记 (7)---volatile/sychronized

1. volatile和synchronized关键字 volatile 可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要 从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问 的可见性。 synchronized可以修饰方法或者以同步块的形式来进行使用,它保证了线程对变量访问的可见性 和排他性。 我们对如下代码进行反编译 public class S...

2020-05-01 20:28:39 138

special.zip

情人节 自制旋转魔方相册 点击魔方即可进行魔方展开。在微信开发平台实现,具体详见代码!里面的图片目录需要按照自己的目录进行替换操作,直接使用会产生无法访问资源的问题。

2020-05-12

空空如也

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

TA关注的人

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