
Java
文章平均质量分 93
Shi Peng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java Agent探针 学习笔记
一、前言当我们遇到线上问题,需要加log来辅助定位问题时,通常需要改代码上线发布,才能输出log来,这样比较麻烦。思考:是否可以在服务器上改代码让它实时生效呢?答案是可以的!从java5开始,jdk中新增了一个java.lang.instrument.Instrumentation 类,它提供在运行时重新加载某个类的的class文件的api。下面是它的一些主要api:public interface Instrumentation {/** * 加入一个转换器Transformer,之原创 2021-05-23 12:33:23 · 840 阅读 · 0 评论 -
java8特性总结
一、前言Lambda表达式是Java8的一个重要特性,java8是2014年Oracle发布,它主要支持函数式编程、新的JavaScript引擎、新的日期API、新的Stream API等。二、Java8的新特性Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。默认方原创 2021-05-22 23:50:55 · 193 阅读 · 0 评论 -
AQS原理 学习笔记
一、什么是AQSAQS即AbstractQueuedSynchronizer,是一个构建锁和同步器的框架。AQS支持独占锁(exclusive)和共享锁(share)两种模式:独占锁:只能被一个线程获取到,如ReentrantLock共享锁:可以被多个线程同时获取,如CountDownLatch无论是独占锁还是共享锁,本质上都是对AQS内部的一个变量state的获取。state是一个原子的int变量,用来表示锁的状态、资源数等。二、AQS内部的数据结构及原理...原创 2021-05-22 20:21:55 · 231 阅读 · 0 评论 -
Java并发包APIs总结
一、前言Java5开始提供了java.util.concurrent,里面包含了绝大多数编写Java高并发代码的技巧和套路,所以不单要会用API,还需要理解concurrent包里每个API的设计方法和目的,这样在自己编写高并发程序时,才能够在需要时采用合适的技巧来解决问题。二、API接口及核心类2.1、java.util.concurrent下的接口BlockingDequeBlockingQueueCallableCompletableFuture.AsynchronousCompleti原创 2021-05-22 11:52:33 · 322 阅读 · 1 评论 -
synchronized锁升级的底层实现
一、synchronized可用在如下场景1、修饰实例的方法用于锁定当前对象this。public synchronzied void test() {...}2、修饰静态方法用于锁定当前类public static synchronized void test() {...}3、修饰代码块public void test() { // 对当前对象this加锁 synchr...原创 2020-03-01 22:13:10 · 537 阅读 · 2 评论 -
Java高级特性与JVM
一、java基础知识(必须会的基础)1. 语言基础1)关键字:static, volatile, final , transient2)高阶语法:内部类(高频考点)、泛型。1.1 static:属于类而非实例static变量不会被GC回收,也就意味着有内存泄露的风险。附:融云的static内存缓存,如果不加控制,可能会由于内存缓存太多而导致频繁的full GC。static会将所引用...原创 2019-03-16 15:13:54 · 474 阅读 · 0 评论 -
G1垃圾回收器学习笔记
一、G1垃圾回收器概述G1(Garbage First)垃圾收集器是当前最好的垃圾回收器之一。早在JDK7时被引入。官方也推荐使用G1来代替选择CMS。G1的特点:引入分区的思路,弱化了分代的概念合理利用垃圾收集各个周期的资源解决了其他收集器甚至CMS的众多缺陷。二、JVM各种GC回收器比较GC的目标是:高效收集、减少停顿(STW: Stop The World)。其间经历了串...原创 2019-03-11 23:26:21 · 333 阅读 · 0 评论 -
Java线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。一.Java中的Threa...原创 2019-02-26 22:11:25 · 312 阅读 · 0 评论 -
Java基本类型占用的内存大小
一、基本数据类型一个byte是8位。在Java中,一个字符是2个byte字节,一个byte等于8 bit。在Java中,boolean被当成int处理,所以4个字节。二、一个空对象占用多少个字节?对于32位的JDK:new一个Object对象占用4+8=12字节,其中,4个字节是引用,8个字节是堆内存。2. 对于64位的JDK:new一个Object对象占用8+16=24字节。其...原创 2019-02-26 21:45:26 · 6294 阅读 · 0 评论 -
Java集合源码学习
Java集合工具包位于java.util包下,包含了很多数据结构。如数组、链表、栈、队列、集合、哈希表等。Java集合框架大致分为5个部分:List列表、Set集合、Map映射、迭代器(Iterator, Enumeration)、工具类(Arrays, Collections)Java集合类的整体框架如下:集合类可分为Collection和Map两大类。Collection又分为:1...原创 2019-02-26 21:31:25 · 700 阅读 · 0 评论 -
Java中的各种锁&CAS
画外音:java中的各种锁是高并发的关键,CAS是乐观锁的经典模型。1. Java中有哪些锁?● 公平锁 / 非公平锁● 可重入锁 / 不可重入锁● 独享锁 / 共享锁● 互斥锁 / 读写锁● 乐观锁 / 悲观锁● 分段锁● 自旋锁1. 公平锁:按多线性申请锁的顺序来获取锁。Java ReentrantLock默认是非公平锁。非公平锁的吞吐量比公平锁答。Synchronize...原创 2019-03-02 14:40:12 · 1146 阅读 · 0 评论 -
Java多线程与并发
一、基础概念1. 并发级别并发级别分为阻塞和非阻塞;非阻塞分为无障碍、无锁、无等待。1)阻塞:当一个线程进入临界区后,其他线程必须等待。2)无障碍:一种最弱的非阻塞调度,可自由出入临界区,无竞争时有限步骤完成操作,有竞争时回滚数据。阻塞与非阻塞的无障碍比较:阻塞类似于悲观锁,它认为一起修改数据有可能把数据修改坏;而非阻塞类似于乐观锁,它任务大家一起修改数据未必会把数据修改坏,当它发现多...原创 2019-02-23 14:37:19 · 345 阅读 · 0 评论 -
Java并发包学习LinkedBlockingQueue
一。概述LinkedBlockingQueue是cocurrent包下的一个线程安全的阻塞队列,与ArrayBlockingQueue比,LinkedBlockingQueue队列用链表实现,通常用于生产者、消费者模型。二。LinkedBlockingQueue的数据结构1. 链表节点static class Node<E> { E item; /** ...原创 2019-01-15 23:16:31 · 275 阅读 · 0 评论 -
Java并发包学习LinkedHashMap
1. 概述LinkedHashMap的遍历顺序与插入时的顺序相同。例如:LinkedHashMap&lt;String, Integer&gt; lmap = new LinkedHashMap&lt;String, Integer&gt;();lmap.put("语文", 1);lmap.put("数学", 2);lmap.put("英语&a原创 2019-01-15 23:10:24 · 466 阅读 · 0 评论 -
Java并发包学习ReentrantReadWriteLock
一。概述ReentrantReadWriteLock比synchronized更加灵活,更加面向对象。ReentrantReadWriteLock实现了ReadWriteLock接口,ReadWriteLock接口包含两个方法:Lock readLock();和Lock writeLock();ReentrantReadWriteLock是个读写锁,即多个读锁不互斥,读锁和写锁互斥,这是由...原创 2019-01-15 23:06:11 · 177 阅读 · 0 评论 -
Java并发包学习ThreadLocal
ThreadLocal直译为“本地线程”,但如果你真那么认为,那就错了!其实,ThreadLocal就是一个容器,用于存放线程的局部变量。它应该叫做ThreadLocalVariable(线程局部变量)才对。在JDK1.2开始,java.lang.ThreadLocal就诞生了,是为了解决多线程并发问题而设计的,只是设计的有些难用,所以至今没有得到广泛的使用。ThreadLocal的示例:1...原创 2019-01-15 23:04:56 · 338 阅读 · 0 评论 -
Java并发包学习笔记 CopyOnWriteArrayList
ConcurrentHashMap相比HashMap是线程安全的,与Hashtable及Collections.synchronizedMap()相比,并发性能更好,但ConcurrentHashMap降低了对读一致性的要求(类似CAP原理)。ConcurrentHashMap的设计,使用了大量的volatile, final, CAS等lock-free技术,以此来减少锁竞争对于性能的影响。...原创 2019-01-15 23:02:02 · 182 阅读 · 0 评论 -
Java并发包学习笔记ConcurrentHashMap
一、ConcurrentHashMap参考Url: http://www.importnew.com/22007.htmlConcurrentHashMap相比HashMap是线程安全的,与Hashtable及Collections.synchronizedMap()相比,并发性能更好,但ConcurrentHashMap降低了对读一致性的要求(类似CAP原理)。ConcurrentHash...原创 2019-01-15 22:51:31 · 336 阅读 · 0 评论