-
【Java】ArrayList 的实现原理
摘要:一、概述 本例使用的是JDK8. 一上来,先来看看源码中的这一段注释,我们可以从中提取到一些关键信息: Resizable-array implementation of the List interface. Implements all optional list operations, and
阅读全文
-
【设计模式】模版方法模式
摘要:模板方法模式 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。 例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,
阅读全文
-
【Java多线程】Java中的13个原子操作类(十九)
摘要:一、Atomic包 当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使用synchron
阅读全文
-
【Java多线程】Java中的并发工具类(十八)
摘要:在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier 和 Semaphore 工具类提供了一种并发流程控制的手段。三个类的原理都是基于AQS。Exchanger工具类则提供了在线程见交换数据的一种手段。 一、等待多线程完成的CountDownLa
阅读全文
-
【设计模式】代理模式
摘要:一、定义 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 二、结构 代理模式的结构 代理模式的主要角色如下。 1)抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现
阅读全文
-
【Java多线程】重入锁(ReentrantLock)(十七)
摘要:重入锁 重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。 考虑如下场景:当一个线程调用Mutex的lock()方法获取锁之后,如果再次调用lock()方法,则该线程将会被自己所阻塞,原因是
阅读全文
-
【Java多线程】ArrayBlockingQueue阻塞队列原理分析(十六)
摘要:阅读此篇文章请先了解 AQS:【Java多线程】队列同步器AQS(十一) 阻塞队列:【Java多线程】Java中的阻塞队列(十五) 一、ArrayBlockingQueue介绍 ArrayBlockingQueue是一个用数组实现的有界阻塞队列。此队列按照先进先出(FIFO)的原则对元素进行排序。
阅读全文
-
【Java多线程】Java中的阻塞队列(十五)
摘要:什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。 阻塞队列常用于生
阅读全文
-
【Java多线程】自定义同步组件 - TwinsLock(十四)
摘要:前面章节(【Java多线程】队列同步器AQS(十一))中,对同步器AbstractQueuedSynchronized进行了实现层面的分析,本章通过编写一个自定义同步组件来加深对同步器的理解 同步组件要求 设计一个同步工具:该工具在同一时刻,只允许至多两个线程同时访问,这里显然是共享式访问将被组赛,
阅读全文
-
【Java多线程】LockSupport 工具 、Condition接口(十三)
摘要:一、LockSupport 工具 1.1 LockSupport 介绍 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应工作。LockSupport定义了一组的公共静态方法,这些方法提供了基本的线程阻塞和唤醒功能,而LockSupport也成为构建同步组件的基础工具 L
阅读全文
-
【Java多线程】ReentrantLock锁原理分析(十二)
摘要:介绍了锁和AQS:【Java多线程】队列同步器AQS(十一),阅读此篇文章请先了解AQS 一、ReentrantLock介绍 ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取这个锁,其他线程尝试获取就会被阻塞并放入AQS阻塞队列中, 类图结构如下: 二、原理分析 了解锁的基本原
阅读全文
-
【Java多线程】队列同步器AQS(十一)
摘要:一、Lock接口 Lock实现和synchronized关键字类似的同步功能,只是Lock在使用时需要显式地获取和释放锁,synchronized实现的隐式的获取所和释放锁。 虽然Lock它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操
阅读全文
-
【Java多线程】并发包中ThreadLocalRandom类原理剖析(十)
摘要:并发包中ThreadLocalRandom类原理剖析 ThreadLocalRandom类是JDK7在JUC包下新增的随机数生成器,它解决了Random类在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试的不足。本节首先讲解下Random类的实现原理已经它在多线程下使用的局限性,然
阅读全文
-
【Java多线程】Thread类中interrupt()、interrupted() 和isInterrupted() 方法详解(九)
摘要:方法官方说明 interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。 interrupted()方法 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中
阅读全文
-
【设计模式】享元模式
摘要:享元模式 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相
阅读全文
-
【设计模式】外观模式
摘要:外观模式 影院管理项目 我们先举现实中一个家庭影院的例子 DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 • 开爆米花机 • 放下屏幕 • 开投影仪 • 开音响 • 开DVD,选dvd • 去拿爆米花 • 调暗灯光 • 播放
阅读全文
-
【JVM】StringTable(十四)
摘要:1、String 的基本特性 1.1、String 概述 1、String:字符串,使用一对 “” 引起来表示 1 String s1 = "mogublog" ; // 字面量的定义方式 2 String s2 = new String("moxi"); // new 对象的方式 2、String
阅读全文
-
【设计模式】组合模式
摘要:组合模式 看一个学校院系展示需求 编写程序展示一个学校院系结构: 需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图: 传统方案解决学校院系展示,如图: 传统方案解决学校院系展示存在的问题分析: 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小
阅读全文
-
【JVM】执行引擎(十三)
摘要:1、执行引擎概述 执行引擎位置 执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器 1.1、执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统
阅读全文
-
【设计模式】装饰者模式
摘要:装饰者模式 现在有这样一个项目,星巴克咖啡订单项目: 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便
阅读全文
|