java基础
文章平均质量分 75
梧桐和风
学如逆水行舟,不进则退。要知道,比你聪明的人比你还努力。
展开
-
一文深入分析AQS(原理篇)
之前写过AQS的文章 AbstractQueuedSynchronizer整体解析),当时只是简单介绍了下,没有涉及源码分析和实现细节,但这毕竟是java同步中最重要的类,于是重写了部分内容,添加了源码分析和其他细节。本文分成两个部分,第一部分从整体上分析AQS的实现机制和原理,第二部分深入源码探究。好了,那就开始吧整体介绍从AQS类的注释中,我们可以了解到:该类是一个用于构建锁或其他同步器的基础框架,使用一个int的成员变量表示同步状态。另外,还有一个内置的先进先出的队列可储存竞争同步状态时排队的线原创 2021-06-09 14:44:35 · 909 阅读 · 0 评论 -
Thread的join()方法解析
一般用join方法实现主线程等待其他异步线程完成,今天就看看它到底是咋实现的。先看下示例 // 子线程 static class SleepThread implements Runnable { @Override public void run() { try { System.out.println("子线程开始"); Thread.sleep(1000);原创 2021-06-08 12:45:40 · 414 阅读 · 0 评论 -
深入源码剖析spring实现原理
spring的重要性不用多说了,本文从源码角度深入分析spring的实现原理和一些关键点。争取一篇文章让你对spring有更整体深刻的理解。一、整体分析在分析源码之前,先从整体上了解下spring,这对后面源码分析是很重要的。注:本文基于目前(2021-6)spring最新版本5.3.7我们知道spring主要特性是ioc和aop,而这两者中最重要的还是ioc,它提供了管理bean的容器,其他特性都是基于此容器的。那么要了解spring,主要是看看它是怎么构建ioc的。找到bean定义根据原创 2021-06-06 23:54:08 · 612 阅读 · 5 评论 -
关于网上一个jedisLock锁问题的探讨
关于网上一个jedisLock锁问题的探讨前言前段时间项目有关redis分布式锁的代码经常出现锁超时的情况,经排查终于发现了个隐藏的问题,现记录下来以备忘。问题复现引用的jedis锁项目是 <groupId>com.github.jedis-lock</groupId> <artifactId>jedis-lock</artifactId> <version>1.0.0</version>项目很简单,就一个java类,原创 2021-04-22 23:19:39 · 445 阅读 · 0 评论 -
jav学习笔记-String源码分析
java中用String类表示字符串,是lang包里面使用频率很高的一个类,今天我们就来深入源码解析。事例和特性均基于java8版本。原创 2016-11-11 00:27:27 · 2924 阅读 · 0 评论 -
Wait/Notify通知机制解析
Wait/Notify通知机制解析前言我们知道,java的wait/notify的通知机制可以用来实现线程间通信。wait表示线程的等待,调用该方法会导致线程阻塞,直至另一线程调用notify或notifyAll方法才可另其继续执行。经典的生产者、消费者模式即是使用wait/notify机制得以完成。在这篇文章中,我们将深入解析这一机制,了解其背后的原理。原创 2017-12-09 22:49:04 · 10377 阅读 · 7 评论 -
AbstractQueuedSynchronizer整体解析
AbstractQueuedSynchronizer整体解析前言在此之前,我们深入源码分析过ReentrantLock系列,在那里就探讨过AbstractQueuedSynchronizer(下称AQS)类,称其是同步组件乃至整个并发包的基础类。这篇文章就深入AQS,从AQS的角度了解同步器以及ReentrantLock、ReentrantReadWriteLock等的实现机制,实现自定义的同步组件原创 2017-12-10 23:11:57 · 459 阅读 · 2 评论 -
java I/O体系总结(三) java NIO
java 新IO IO NIO 特点 面向流 面向缓冲 是否阻塞 阻塞IO 非阻塞IO 无 选择器java 新IO主要部分:Buffer(缓冲区)、Channel(通道)、Selectors(选择器)Java NIO的非阻塞模式,如使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数...原创 2018-09-13 21:23:05 · 432 阅读 · 0 评论 -
java知识体系整理(一)基础知识
基础知识基础知识主要涉及java语法及常见知识点。包括IO、类加载,反射、注解、异常,集合类等。下面以这几个大类分别做汇总,并引出其中若干小问题。知识梳理java的集合体系及继承关系,以及主要类的用法及原理。java类加载机制BIO与NIO、AIO区别及联系,什么是Reactor模型。异常类继承关系,受检异常和非受检异常。反射知识梳理。其他java特性(枚举,注解,synchro...原创 2019-04-01 20:39:08 · 6212 阅读 · 1 评论 -
java知识体系整理(二)JVM、GC回收及调优
本部分涉及JVM内存结构及GC算法,java调优等知识。JVMJVM内存结构划分(堆、栈、方法区、程序计数器等)标记清除、标记整理及复制算法。常用GC参数常见垃圾回收器及优缺点程序CPU 100%怎样排查?常见的JVM工具有哪些JVM优化栈上分配 当开启逃逸分析后,JVM会把确定不会溢出的对象放到栈上分配,是JVM的一项优化技术,基本思想是对线程私有的对象将他们打散分...原创 2019-04-01 21:44:54 · 453 阅读 · 0 评论 -
关于HashMap在高并发下的问题
前言总所周知,HashMap不是线程安全的,在高并发情况下会出现问题。特别是,在java1.7中,多线程的HashMap会出现CPU 100%的严重问题。这个问题是怎样产生的,后续版本还会有这个问题吗(指java8及后续版本)?下面就来用通俗的语言讲解下。解析关于这个问题,是由于java7多线程扩容机制下链表变为循环链表,再获取该链表导致的。看下java7中扩容的代码。java7中Hash...原创 2019-04-02 15:23:38 · 1580 阅读 · 0 评论 -
java的异常、finally和return
前言本文主要讲解java的异常体系及有关finally和return的返回问题。继承体系java中所有异常类的基类都是Throable类。它的两大子类分别是Error和Exception。Error表示错误,是程序处理不了的。Exception类又分为运行时异常(RuntimeException异常)和非运行时异常(或称为受检异常)。顾名思义,运行时异常是程序在运行时才能被检查出来的异常,...原创 2019-04-16 12:53:38 · 1395 阅读 · 2 评论 -
java8的内置函数式接口总结
java8引入了函数式的编程,在提高代码简洁和可读性的同时也 增强了程序并发执行的能力。这篇文章我们主要关注java8的函数式接口,以及其内置的若干函数式接口。原创 2017-10-02 10:56:57 · 3425 阅读 · 0 评论 -
ReentrantLock原理探究(一)
前言ReentrantLock类是synchronized语义的替代品,可以实现与其相同的功能,了解其实现原理对并发编程无疑是很有帮助的。其次,ReentrantLock 的实现基础AQS(AbstractQueuedSynchronizer)也是java并发编程中相当重要的一个类,所以无论如何,我们都要了解一番。原创 2017-05-21 10:16:32 · 1202 阅读 · 3 评论 -
java方法覆盖的一点研究
java方法覆盖的一点研究对于方法覆盖,本来我的理解是:子类覆盖父类的方法,当子类的方法签名与父类一致时,就算覆盖了父类的方法。然而在研究String相关类源码是发现了这样的代码:原创 2016-10-13 22:35:15 · 578 阅读 · 0 评论 -
java对象的比较
java中比较两对象是否相等是很常见的操作,通常我们使用“==“或equals()方法,那这两种方法有什么区别,是否都适用所有对象呢?下面我们详细了解下。原创 2016-10-08 09:37:15 · 1240 阅读 · 0 评论 -
java基础类解析(1)-Integer
Integer类解析原创 2016-10-08 19:17:33 · 996 阅读 · 0 评论 -
java学习笔记-String源码分析(2)
本文主要深入分析了java String类相应方法的源码及用法。原创 2016-11-19 15:12:28 · 1683 阅读 · 0 评论 -
[转载]java8 Stream用法详解
最近在学习java8新特性时发现了这篇图文并茂的文章,于是转载以供学习。转载自并发编程网 – ifeve.com Java8初体验(二)Stream语法详解Stream转载 2016-11-24 10:06:02 · 646 阅读 · 0 评论 -
Objetcs类解析
自java7开始,java.util包添加了一个对Object的常用方法操作类,即Objects工具类。主要为提供空指针安全的equals、hash、toString等的相应方法。其类方法概要如下://判断两对象是否相等 public static boolean equals(Object a, Object b); //深度比较两对象是否相等,用于数组等形式 public static b原创 2017-03-09 22:41:22 · 515 阅读 · 0 评论 -
java 集合与数组的互转
在实际工作中,我们经常需要Collection类型与数组的互相转换,javaAPI也提供了相应的方法帮我们完成操作。原创 2017-03-11 14:42:49 · 7118 阅读 · 0 评论 -
java多线程之线程通信
在多线程机制中,线程之间需要传输信息。一般有以下几种通信机制:共享对象:通过在共享对象中设置信号量,多个线程通过读取、修改该信号量来通信。wait/notify()方法:线程之间通过调用wait()、notify()方法实现线程等待、唤醒状态,从而达到线程通信的目的。接下来我们分别看看这两种方法:通过共享对象通信在共享对象中设置信号量是最简单也是最常用的线程通信方法。共享变量需要使用volat原创 2017-05-11 13:23:35 · 533 阅读 · 0 评论 -
java注解解析
java注解解析什么是注解什么是注解,注解就是一种描述源码的元数据。我们可以通过注解给类、方法或字段提供额外的信息以便了解更多信息。举个例子,java中常见的@Override就是一个注解。它的作用是提示由它修饰的方法是一个重写方法,如果父类没有这个方法编译器会报错。这样这个注解就给我们传达了重写方法这个信息,在使用时就会多加注意。原创 2017-04-22 14:50:42 · 416 阅读 · 0 评论 -
ReentrantLock原理探究(二)
前言上篇ReentrantLock原理探究(一)介绍了ReentrantLock类的使用说明,详细解析了关于非公平锁的lock()过程。这篇我们继续分析。原创 2017-05-24 12:42:10 · 724 阅读 · 0 评论 -
java代理模式与JDK代理解析
前言代理模式是很常用的设计模式之一,一般可分为静态代理和动态代理两类。java利用反射也对动态代理提供了支持。今天我们就来学习学习。1. 定义 给某一个对象提供一个代理,并由代理对象控制对原对象的引用,称为代理模式。它是一种对象结构型模式。即可理解为,某个对象实例(记为Subject)不方便直接引用,我们就提供一个代理实例(记为Proxy),让这个代理实例去调用实例对象。原创 2017-05-24 12:39:08 · 497 阅读 · 0 评论 -
TreeMap的排序及比较器问题
本文介绍了Map的按值排序以及由此引出的比较器等的问题,深入探讨了Comparator及Comparable两个比较器的不同之处,希望给他人以帮助。原创 2016-07-17 23:03:52 · 36669 阅读 · 0 评论