- 博客(27)
- 资源 (13)
- 收藏
- 关注
原创 JAVA : ReentrantReadWritelock
ReentrantReadWriteLock采用读写分 离的策略,允许多个线程可以同时获取读锁 。架构图读写锁的内部维护了 一个 ReadLock 和一个 WriteLock,它们依赖 Sync 实现具体功能 。 而Sync继承自AQS,并且也提供了公平和非公平的实现。 下面只介绍非公平的读写锁实 现。我们知道 AQS 中只维护了 一 个 state 状态,而 Ree...
2019-06-27 18:09:18 1120
原创 Thread.sleep、Object.wait、LockSupport.park 区别图解
Thread.sleep、Object.wait、LockSupport.park 区别如下图:参考:Java 并发编程之美https://blog.csdn.net/u013332124/article/details/84647915
2019-06-26 17:53:22 3730
原创 JAVA 可重入锁: ReentrantLock
概念ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性, synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。那么,要想完完全...
2019-06-26 17:17:10 1026
原创 Java CopyOnWriteArrayList 概述
CopyOnWriteArrayList是一个线程 安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的 ,也就是使用了写时复制策略。 在 CopyOnWriteArrayList 的类图中,每个 CopyOnWriteArrayList 对象里面有一个 array 数组对象用来存放具体元素, ReentrantLock 独占锁对 ...
2019-06-26 14:17:30 2313 1
原创 JDK 8 原子操作类 LongAdder
AtomicLong 通过 CAS 提供了非阻塞的原子性操作,相 比使用阻塞算法的 同步器来说它的性能己经很好了,但是 JDK 开发组并不满足于此 。 使用 AtomicLong 时, 在高并发下大量线程会同时去竞争更新 同→个原子变量,但是由于同时只有一个线程的 CAS 操作会成功,这就造成了大 量 线程竞争失败后,会通过无限循环不断进行自旋尝试CAS 的操作, 而这会白白浪费 CPU 资源。...
2019-06-26 11:21:21 1826
原创 ConcurrentHashMap BUG 死锁
BUG 代码:package com.zl.map.concurrent;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;public class ConcurrentHashMapBug { public static void main(String[] args) { ...
2019-06-25 18:29:02 4152
原创 在linux系统中查看 缓存行 [ cacheline ] 的大小
linux系统中缓存行 [ cacheline ] 默认值: 64byte为了解决计算机系统中主内存与 CPU 之间运行速度差问题,会在 CPU 与主内存之间 添加一级或者多级高速缓冲存储器( Cache)。这个 Cache 一般是被集成到 CPU 内部的, 所以也叫 CPU Cache,如图所示是两级 Cache 结构。在 Cache 内部是按行存储的,其中每一行...
2019-06-25 16:53:07 12597
原创 Java 多线程并发线程基础
进程&线程线程是进程中的一个实体,线程 本身是不会独立存在的 。进程是代码在数据集合上的 一 次运行活动 , 是系统进行资源分配 和调度的基本单位, 线程则是进程的一个执行路径, 一个进程中至少有一个线程,进程中 的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的, 但是 CPU 资源比较特殊, 它是被分 配到线程的 , 因为真正要占用 CPU 运行的是线程 ,...
2019-06-25 16:37:40 1060
原创 一张图理解JAVA 多线程创建
Java 中有三种线程创建方式,实现 Runnable接口的 run方法, 继承 Thread类 并重写 run 的方法, 使用 FutureTask方式。
2019-06-25 11:46:47 1010
原创 JAVA 队列: SynchronousQueue
SynchronousQueue 是一个不存储元素的阻塞队列。每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。SynchronousQueue 可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合于传递性场景,比如在一个线程中使用的数据,传递给另外一个线程使用,SynchronousQueue 的吞吐量高于 Linke...
2019-06-24 17:54:20 1613
原创 Java 同步器
java.util.concurrent 包包含了几个能帮助人们管理相互合作的线程集的类见表 14-5。这 些机制具有为线程之间的共用集结点模式(common rendezvous patterns) 提供的“ 预置功能” ( canned functionality ) 0 如果有一个相互合作的线程集满足这些行为模式之一, 那么应该直接 重用合适的库类而不要试图提供手工的锁与条件的集合。...
2019-06-24 11:44:05 1140
原创 Java 注解
4 种标准元注解元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明。@Target 修饰的对象范围@Target 说明了 Annotation 所修饰的对象范围: Annotation 可被用于 packages、types(类、接口、枚举、Annot...
2019-06-21 16:25:56 938
原创 Java 反射 (运行状态中知道类所有的属性和方法)
在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为 Java 语言的反射机制。编译时类型和运行时类型编译时的类型由声明对象时实用的类型来决定,运行时的类型由实际赋值给对象的类型决定 。Person p=new Student();...
2019-06-21 15:16:15 2772
原创 Java 异常分类
异常分类:Error 和 ExceptionErrorError 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。Exception(RuntimeException、CheckedException)Exception 又有两个分支,一个是运行时异...
2019-06-21 15:01:05 2256
原创 JDK1.8 ConcurrentHashMap 源码解析
概述ConcurrentHashMap 是 util.concurrent 包的重要成员。ConcurrentHashMap 的源代码会涉及到散列算法,链表数据结构和红黑树Java8 ConcurrentHashMap 源码真心不简单,最难的在于扩容,数据迁移操作不容易看懂。前面我画了几张图, 便于理解. 剩下的需要你自己静下新来,安心看源码.建议从 put 方法开...
2019-06-20 14:08:13 1084
原创 JDK1.8 HashMap和TreeMap区别,读懂这一篇就够了
刚刚被问到HashMap和TreeMap 有什么区别,想了想,就整理一下吧.1.数据结构HashMap: 数组+列表+红黑树TreeMap: 红黑树2. 因为数据结构,导致节点的实体类不一样HashMap: 两种 Node 和 TreeNode (支持链表)static class Node<K,V> implements Map.E...
2019-06-18 11:45:24 11903 3
原创 JDK1.8 HashMap 源码解析
HashMap 源码解析1.图解:2.源码为了方便 DEBUG , 我把 HashMap 的源码分为了三部分import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable...
2019-06-17 16:30:52 1269
转载 生成 HashCode 一致的字符串
生成 HashCode 一致的字符串package com.zl.map;import java.math.BigDecimal;import java.util.Random;/** * “中间相遇法”是生日攻击的一种变形,它不比较Hash值,而是比较链中的中间变量。这种攻击主要适用于攻击具有分组链结构的Hash方案。 * 中间相遇攻击的基本原理为 ...
2019-06-17 11:51:14 2307
原创 Java 位运算符
Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:A = 0011 1100B = 0000 1101-----------------A&b = 0000 1100A | B ...
2019-06-13 19:18:56 946
原创 服务器参考性能
参考机器服务配置,用于估算集群规模,具体情况,参考当前市场. --2019年06月戴尔R730服务器 2U双路. 一台 3 万.+CPU: 两颗 16 核内存: 24 个接口(单条最大 32G) 最大容量 768G硬盘: 8块硬盘 单块最大8T 共 64T网卡: 集成四口,千兆戴尔R740服务器 2U双路. 一台 5 万+CPU: 两...
2019-06-13 16:30:23 1052
原创 使用intellij idea 查看Java字节码
最近在研究 jvm ,需要查看字节码. 整理使用intellij idea 查看Java字节码 使用方式如下:内容参考:Program:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/javapArguments:-c -l $FileClass$Wor...
2019-06-13 09:58:36 3451 4
原创 JAVA 对象头解析
一个Java对象在JVM中是由一个对应角色的oop对象来描述的,比如instanceOopDesc用来描述普通实例对象,arrayOopDesc用来描述数组对象,而这些类型的oop对象均是继承自oopDesc。class oopDesc { friend class VMStructs; friend class JVMCIVMStructs; private: //...
2019-06-12 14:44:34 6096 2
原创 [JVM]了断局: 虚拟机字节码指令表速查
字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2...
2019-06-11 14:34:20 1064
原创 C 语言 与 Java 区别 梳理
数据类型c 语言( Linux x86_64)java 语言定义常量#define 预处理器const 关键字defind和 const 区别C存储类auto 存储类register 存储类static 存储类extern 存储类C判断C循环goto 语句C指针什么是指针?如何使用指针?C 中的 NULL 指针...
2019-06-10 18:34:46 1160
转载 项目中常用的19条MySQL优化
一、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式key_len列,索引长度rows列,扫描行数。该值是个预...
2019-06-10 16:37:28 932
原创 Java8 命令详解
Java 命令:用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如...
2019-06-05 16:39:36 1753
原创 CentOS 7 中安装 bcc-tools
第一步,升级内核。你可以运行下面的命令来操作:# 升级系统yum update -y# 安装 ELReporpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm# 安装新...
2019-06-04 15:03:26 4027 1
jdk-8u251-macosx/linux/windows 多版本下载
2020-06-28
Flink基础教程.pdf
2019-05-28
深入理解计算机系统(原书第3版)PDF 计算机科学丛书 [美] 兰德尔 E.布莱恩特
2019-03-08
Java虚拟机规范(Java SE 8版) 带书签
2018-10-26
Thinking in UML(2 edition)
2014-06-24
《谁说菜鸟不会数据分析》入门篇-简版电子书
2014-06-24
[逻辑思维训练500题II].于雷.扫描版
2014-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人