◆【编程语言】
皮皮的雅客
这个作者很懒,什么都没留下…
展开
-
Java并发包下的锁(4)——Condition接口
Condition 接口提供了类似Object的监视器方法,与Lock配合可以实现 等待/通知 模式文章目录Condition的接口Condition的实现1. 等待队列2. 等待3. 通知参考Condition的接口在说Condition的接口之前,先对比一下与Object监视器的异同:对比项Object的监视器(Monitor)Condition前置条件获...原创 2018-11-08 17:04:59 · 198 阅读 · 0 评论 -
深入理解 synchronized
在多线程并发编程中synchronized一直是元老级角色,被很多人称为重量级锁。但是,这都是JDK1.6之前的事了,随着JDK1.6对synchronized进行了各种优化之后,其性能得到了很大的提升,重量级只是部分情况了。synchronized 的实现原理synchronized实现同步的基础:Java中的每一个对象都可以作为锁。表现为以下3种形式:对于普通同步...原创 2018-08-16 23:35:33 · 381 阅读 · 0 评论 -
对象的克隆
什么是对象的克隆? 一种比较官方的解释:需要修改一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本。 用我们自己的话来说:把你U盘里面的数据全给我拷贝一份,这样我修改我的的U盘里面的数据,你的U盘里面的数据不会改变(这样是不是变得更容易理解)在Java中如何实现对象的克隆如下图就是对象拷贝的过程 其实我们可以思考一个问题,在Java中数据类型分为...原创 2018-08-16 13:57:11 · 116 阅读 · 0 评论 -
Integer细节注意
问题引入public class Demo{ public static void main(String[] args){ Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2);//true String i3 = "100"; ...原创 2018-08-16 13:49:16 · 125 阅读 · 0 评论 -
深入理解 volatile
volatile 是轻量级的synchronized,它在多处理开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。volatile 定义与实现原理 volatile的定义:Java编程...原创 2018-08-14 19:54:50 · 4627 阅读 · 0 评论 -
Java中的引用
java中的引用 在Java中,引用是一种神奇的东西,通过引用我们可以完成很多事情。习以为常的我们往往忽略了一些本质的东西。我们浅显的以为引用无非就是用于对象调用的,真的是这样吗?你真正了解了Java中的引用了吗?让我们透过现象看本质,去了解一些更深的东西。在讨论引用之前,我们先聊聊对象这种东西。对象——一个神奇的物种(我无所不能) 看了这张图也许大家都对对象这玩意儿有...原创 2018-08-11 22:17:24 · 418 阅读 · 0 评论 -
Java 8 新特性——lambda表达式
什么是lambda表达式?lambda 表达式是一个可传递的代码块,可以在以后执行一次或者多次 —–>《Java核心技术》lambda 表达式是一个匿名函数为什么使用lambda表达式?先看一个例子,这是一个典型的比较器,使用这个比较器可以对任意字符串按长度进行排序。 Comparator<String> com = new Compara...原创 2018-08-09 13:26:06 · 152 阅读 · 0 评论 -
Java 8 新特性——使用Stream API来处理集合
目录1. 什么是Stream(“流”)?2. Java 8 为什么引入 Stream API3. 什么是聚合操作4. 流的两种操作类型4.1 了解原理4.2 两种操作方法分类5. 流的使用5.1 几个重要的流接口概要5.2 获取流的几种方式5.2.1 从集合获取流5.2.2 从数组获取流5.2.3 其他获取流的方法(了解)5.3 流转换为其他数据结构...原创 2018-08-09 13:24:48 · 690 阅读 · 0 评论 -
CAS算法(CompareAndSwap)
困惑:刚开始学习并发编程的时候,总会听到一个词:CAS,经常会被其搞懵,不知道CAS到底是什么,用来干什么的,只知道糊里糊涂的理解,感觉懂一点,又感觉少了些什么。所以,为了能彻底搞懂这个玩意儿,写一篇学习笔记谈谈对CAS的理解。什么是CAS算法 CAS(CompareAndSwap, 比较并交换)算法其实是计算机硬件对于并发操作共享数据的支持,保证了数据的原子性。 其实...原创 2018-08-09 13:21:30 · 572 阅读 · 0 评论 -
深入理解HashMap
HashMap 在日常开发中使用频率很高,是Java程序员经常使用的用于映射(键值对)处理的数据类型。本文结合源码,深入分析HashMap的底层原理。属性解析存储结构(基于JDK1.8) HashMap是数组 + 链表 + 红黑树 实现的:几个重要的属性解析 static final int DEFAULT_INITIAL_CAPAC...原创 2018-08-09 09:22:58 · 205 阅读 · 0 评论 -
线程基础知识(1)
进程与线程什么是进程: 我们先看看比较官方的表述,进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 其实关于进程的官方定义也是很好懂,但是我们都不太喜欢过于官方的东西,还是来点比较实在解释比较好。进程就是我们打开的一个个应用程序,每一个应用程序都有属于自己...原创 2018-08-09 13:22:42 · 144 阅读 · 0 评论 -
类加载器ClassLoader
一直想搞清楚类加载器是什么东西,终于有机会好好研究一下。类加载器是什么? 定义:将“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到JVM外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个代码模块的类就是类加载器——ClassLoader。其实说的通俗一点就是将Class加载到JVM中去。ClassLoader结构ClassLoade...原创 2018-09-15 18:46:09 · 347 阅读 · 0 评论 -
类的加载流程
通过类加载器ClassLoader的介绍我们知道了class是由类加载器加载的,了解了类加载器的基本原理,现在记录一下类的加载流程,探索一个类是如何被加载进入JVM内存中的。类加载机制定义: 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。在Java语言中,类型的加载,连接和初始化过程都是...原创 2018-09-15 18:47:43 · 141 阅读 · 0 评论 -
javac编译原理
每个人在学习Java的时候都配置过环境变量,检查是否配置成功的时候,我们总会在命令行敲入两个命令,一个是 java,一个是 javac。刚开始我们都不知道这两个命令代表的含义,随着学习的深入,我们知道了 java 命令就是检查是否找得到运行环境,而 javac 就是编译Java源代码的编译器。现在,深入探索一下 javac 这个神奇的编译器,看看它的背后到底是什么。javac的...原创 2018-09-16 15:26:23 · 291 阅读 · 0 评论 -
Java并发包下的锁(3)——重入锁和读写锁
重入锁 ReentrantLock 和读写锁 ReentrantReadWriteLock 是两个使用很广泛的同步组件,本文将详细介绍这两种锁特性、用法以及个别方法的源码分析文章目录重入锁——ReentrantLock1. ReentrantLock的特性2. 重进入的实现3. 公平锁与非公平锁4. 如何选择 synchronized 和 ReentrantLock读写锁——Reentra...原创 2018-11-08 17:04:21 · 239 阅读 · 0 评论 -
Java并发包下的锁(2)——队列同步器
本文主要介绍队列同步器AbstractQueuedSynchronizer(AQS),简称同步器,它是用来构建锁或者其他同步组件的基础框架,它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。文章目录同步器简介1. 什么是同步器?2. 同步器的API展示3. 自定义同步组件同步器的实现1. 同步队列2. 独占式同步状态获取与释放3. 独占式超时获取同步...原创 2018-11-06 17:26:40 · 560 阅读 · 0 评论 -
Java并发包下的锁(1)——Lock的体系结构
在JDK1.5之前,在协调共享对象的访问时可使用的机制只有synchronized和volatile,这就是我们所熟知的内置锁;在JDK1.5中,著名并发编程大师Doug Lea使用Java编写了一个并发编程框架(java.util.concurrent.* => JUC),提供了更多并发编程的高级手段。例如可以通过显示加锁以保证多线程编程的可靠性,这就是大名鼎鼎的 显示锁。本系列文章将...原创 2018-11-06 17:25:53 · 1301 阅读 · 0 评论 -
线程基础知识(2)
线程的优先级简介 现代操作系统基本采用分时的形式调度运行线程,操作系统会分出一个个的时间片,线程会分配到若干时间片,当线程的时间片用完之后就会发生线程调度,并等待下次分配。线程分配到的时间片的多少决定了线程使用处理器资源的多少,线程优先级就是决定线程需要分配多少处理器资源的线程属性。 在Java中,通过一个整型变量priority来控制优先级,优先级的范围为 1~10,默认的优先级是5:...原创 2018-10-19 18:05:33 · 163 阅读 · 0 评论 -
Java内存模型(2)——happens-before
happens-before 原则 (先行发生原则)是JMM中最核心的概念,该原则阐述了操作之间的内存可见性。happens-before的诞生——完善的JMM Java语言是最早尝试提供内存模型的语言,这是简化多线程编程、保证程序可移植性的一个飞跃。早起类似C、C++等语言,并不存在内存模型的概念,其行为依赖于处理器本身的内存一致性模型,但不同的处理器差异很大,所以一段C++程序在处理...原创 2018-10-14 18:43:45 · 129 阅读 · 0 评论 -
Java内存模型(1)——JMM
在学习Java并发编程中,了解Java内存模型对于我们去理解Java多线程编程是非常有帮助的,本文将对JMM进行一个大体介绍,让我们对JMM有一个大体的轮廓。硬件的内存模型 为了提高效率,充分利用计算机的能力,多任务处理已经成为现代计算机的必备功能。与软件级的并发类似,硬件级的并发也会出现并发访问问题。例如现在的计算机一般是多核计算的,而共享内存区域却只有一块,多处理器与内存之间的数据共...原创 2018-10-09 21:21:36 · 216 阅读 · 0 评论 -
垃圾收集器与回收算法
文章目录运行时数据区PC寄存器Java虚拟机栈(Java方法栈)本地方法栈Java堆方法区运行时常量池对象是如何诞生的?垃圾收集策略对象存活判定算法判定对象是否可回收的算法(一)——引用计数算法判定对象是否可回收的算法(二)——可达性分析算法方法区回收策略判断对象是否死亡1. 第一次标记2. 第二次标记垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法HotSpot算法实现可达性分析问...原创 2018-10-03 20:49:18 · 843 阅读 · 0 评论 -
虚拟机执行字节码
在 javac编译原理中我们了解了Java源码被javac编译器编译成能被JVM装载的Java字节码的过程。在类文件结构中我们知道了Java程序如何存储于字节码文件中(Class文件),了解了Class文件的基本结构,掌握了阅读字节码的基本工具(javap)和如何去阅读字节码。在类的加载流程和类加载器ClassLoader中我们了解了JVM如何加载Class文件。现在,我们将去探讨JVM引擎如...原创 2018-09-30 17:03:25 · 295 阅读 · 0 评论 -
字节码指令
熟悉并掌握字节码指令,懂得阅读字节码文件是Java程序员一项基本技能,本文就罗列一下基本的字节码指令。加载和存储指令 加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传输:将一个局部变量加载到操作数栈: iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload_将一个数值从操作数栈存储到局部变量表: is...原创 2018-09-24 11:54:43 · 224 阅读 · 0 评论 -
类文件结构
文章目录Java语言的无关性Class类文件结构魔数与Class文件版本常量池访问标志三大索引——类索引,父类索引,接口索引集合字段表集合方法表集合属性表集合1. Code属性2. ConstantValue参考Java语言的无关性 从事Java语言开发工作的人都知道,Java语言有一个非常著名的宣传口号就是——一次编写,到处运行。那到底是怎么做到“一次编写,到处运行”的呢? 其实,我们知...原创 2018-09-23 22:45:35 · 160 阅读 · 0 评论 -
Java并发包下的阻塞队列
本文简要介绍一下什么是阻塞队列,Java并发包给我们提供的阻塞队列有哪些,以及怎么去简单使用文章目录阻塞队列 BlockingQueue1. 简单概念2. API介绍BlockingQueue的实现类——七大阻塞队列1. ArrayBlockingQueue2. LinkedBlockingQueue3. LinkedBlockingDeque4. PriorityBlockingQueu...原创 2018-11-17 18:03:23 · 334 阅读 · 0 评论