首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
【JDK】JDK源码分析-ReentrantLock
】的更多相关文章
JDK Collection 源码分析(2)—— List
JDK List源码分析 List接口定义了有序集合(序列).在Collection的基础上,增加了可以通过下标索引访问,以及线性查找等功能. 整体类结构 1.AbstractList 该类作为List的通用骨架实现,和AbstractCollection一样,也是为了减少实现该接口的工作量.为了实现一个只读的List,仅仅只需要实现get和size方法即可.而对于读写的List,则需要额外覆写set,add和remove. 该类基于get(int),set(int, Object)等方…
JDK AtomicInteger 源码分析
@(JDK)[AtomicInteger] JDK AtomicInteger 源码分析 Unsafe 实例化 Unsafe在创建实例的时候,不能仅仅通过new Unsafe()或者Unsafe.getUnsafe()来获取,因为Java会进行安全校验,只有信任的代码,才能够获取实例. @CallerSensitive public static Unsafe getUnsafe() { Class var0 = Reflection.getCallerClass(); if(var0.getC…
【JDK】JDK源码分析-ReentrantLock
概述 在 JDK 1.5 以前,锁的实现只能用 synchronized 关键字:1.5 开始提供了 ReentrantLock,它是 API 层面的锁.先看下 ReentrantLock 的类签名以及如何使用: public class ReentrantLock implements Lock, java.io.Serializable {} 典型用法: public void m() { lock.lock(); // block until condition holds try { /…
设计模式(十八)——观察者模式(JDK Observable源码分析)
1 天气预报项目需求,具体要求如下: 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方). 2) 需要设计开放型 API,便于其他第三方也能接入气象站获取数据. 3) 提供温度.气压和湿度的接口 4) 测量数据更新时,要能实时的通知给第三方 2 天气预报设计方案 1-普通方案 WeatherData 类 传统的设计方案 代码实现 package com.lin.observer; /** * 显示当前天气情况(可以理解为气象站的网站) * @D…
[源码分析]ReentrantLock & AbstractQueuedSynchronizer & Condition
首先声明一点: 我在分析源码的时候, 把jdk源码复制出来进行中文的注释, 有时还进行编译调试什么的, 为了避免和jdk原生的类混淆, 我在类前面加了"My". 比如把ReentrantLock改名为了MyReentrantLock, 在源码分析的章节里, 我基本不会对源码进行修改, 所以请忽视这个"My"即可. 一. 简介 锁是什么? 锁是一种标志, 或者是一种资源, 持有锁的线程才可以继续往下执行相应的内容. 未持有锁的线程需要等待这个锁资源. 直到获取到了这个…
JDK Collection 源码分析(3)—— Queue
@(JDK)[Queue] JDK Queue Queue:队列接口,对于数据的存取,提供了两种方式,一种失败会抛出异常,另一种则返回null或者false. 抛出异常的接口:add,remove,element,分别对应:offer,poll,peek. 整体类结构 PriorityQueue 优先级队列,采用堆来实现,在容量不足,添加元素的时候会自动扩展,对于元素的比较,则实现了两种方式,一种是通过Comparator比较器,另一种是要求对象实现Comparable接口.即如果没有提供C…
JDK Collection 源码分析(1)—— Collection
JDK Collection JDK Collection作为一个最顶层的接口(root interface),JDK并不提供该接口的直接实现,而是通过更加具体的子接口(sub interface)的实现.该接口存在是因为有时候需要更加通用的Collection来对元素进行操作,比如一个方法,接收一个Collection,那么就可以不考虑其具体到底是List还是Set之类的. 其子接口的实现可以提供两种构造方法,一个是空构造方法,另一个是参数为Collection,这样可以实现将任意一个…
Java并发编程之ReentrantLock源码分析
ReentrantLock介绍 从JDK1.5之前,我们都是使用synchronized关键字来对代码块加锁,在JDK1.5引入了ReentrantLock锁.synchronized关键字性能比ReentrantLock锁要差,而且ReentrantLock锁功能要比synchronized关键字功能强大. 特点 synchronized关键字和ReentrantLock锁都是重入锁,可重入锁是指当一个线程获取到锁后,此线程还可继续获得这把锁,在此线程释放这把锁前其他线程则不可获得这边锁.相比…
JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue
JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue 目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlockingQueue,以便日后灵活使用. 1. 在Java的Concurrent包中,添加了阻塞队列BlockingQueue,用于多线程编程.BlockingQueue的核心方法有: boolean add(E e) ,把 e 添加到BlockingQueue里.如果BlockingQueue可以容纳,…
JDK源码分析(11)之 BlockingQueue 相关
本文将主要结合源码对 JDK 中的阻塞队列进行分析,并比较其各自的特点: 一.BlockingQueue 概述 说到阻塞队列想到的第一个应用场景可能就是生产者消费者模式了,如图所示: 根据上图所示,明显在入队和出队的时候,会发生竞争:所以一种很自然的想法就是使用锁,而在 JDK 中也的确是通过锁来实现的:所以 BlockingQueue 的源码其实可以当成锁的应用示例来查看:同时 JDK 也为我们提供了多种不同功能的队列: ArrayBlockingQueue :基于数组的有界队列: Linke…