Java
文章平均质量分 87
a1282379904
这个作者很懒,什么都没留下…
展开
-
JVM监控功能工具jstat的使用
JVM监控功能工具jstat的使用 格式jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] GeneralOption-help:显示帮助信息-version:显示版本-options:显示所有的statOption 如果指定了generalOption, 那么就不能再...2017-08-04 11:37:48 · 188 阅读 · 0 评论 -
Java 获取当前JVM进程ID
Java 获取当前JVM进程ID public static final int jvmPid() { try { RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); Field jvm = runtime.getClass().getDeclaredField("jvm"); jvm....2016-09-12 21:30:13 · 705 阅读 · 0 评论 -
Java NIO时间服务
Java NIO时间服务 这篇文章内容是另一篇文章《Java 实现基于Redis的分布式锁》的分支. 时间服务包括客户端和服务端, 服务端监听请求 ,若是时间请求,则返回当前服务器的时间, 各个客户端(分布式锁) 都从给服务器获取时间,已达到全局时间一致。 共三个类 TimeServer、 TimeClient和TimeClientException,下面是源码: ...2016-09-10 12:57:59 · 98 阅读 · 0 评论 -
Java 原始数据类型
Java 原始数据类型Java共7种原始类型 类型占用字节默认值取值范围boolean4falsefalse,truebyte10-2^7 ~ 2^7-1short20-2^15 ~ 2^15-1int40-2^31 ~ 2^31-1long80-2^63 ~ 2^6...原创 2016-09-07 10:58:02 · 810 阅读 · 0 评论 -
Socket Options
Socket Options以下出现中文的地方并不是对英文的翻译 1. SO_TIMEOUT 单位是毫秒,表示等待客戶端连接的最长时间。 Set a timeout on blocking Socket operations: ServerSocket.accept(); SocketInputStream.read();...2016-08-29 14:29:22 · 408 阅读 · 0 评论 -
Java实现基于Redis的分布式锁
Java实现基于Redis的分布式锁 单JVM内同步好办, 直接用JDK提供的锁就可以了,但是跨进程同步靠这个肯定是不可能的,这种情况下肯定要借助第三方,我这里实现用Redis,当然还有很多其他的实现方式。其实基于Redis实现的原理还算比较简单的,在看代码之前建议大家先去这里看看原理,我就不翻译了,免得变味了,看懂了之后看代码应该就容易理解了。 时间统一问题:各个客户端加锁时需要...2016-08-28 14:45:31 · 1091 阅读 · 0 评论 -
Java实现组件的生命周期化
Java实现组件的生命周期 假如你在写平台或者一个比较大的项目,总会设计到多个模块,模块有大有小,往往模块之前是嵌入式(embbed)的,即小模块由大模块来管理,外层模块控制着里层模块。这时我们为这些组件设计一套通用的生命周期机制会是一种很好的实现方法,既加强了代码的组织也降低了维护的代价。 首先要实现一套生命周期机制需要哪些类呢?LifeCy...2016-08-27 22:42:36 · 417 阅读 · 0 评论 -
API笔记之java.nio.channels.Selector
API笔记之java.nio.channels.Selectorimport java.io.Closeable;import java.io.IOException;import java.nio.channels.spi.SelectorProvider;import java.util.Set;/** * * A multiplexor of {@li...2016-08-27 13:11:51 · 237 阅读 · 0 评论 -
API笔记之java.nio.channels.SelectionKey
API笔记之java.nio.channels.SelectionKey import java.nio.channels.SelectableChannel;import java.nio.channels.Selector;import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;/** * A...原创 2016-08-27 13:10:41 · 159 阅读 · 0 评论 -
Java 实现基于Redis的分布式可重入锁
Java 实现基于Redis的分布式可重入锁之前在 Java实现基于的Redis的分布式锁 这篇文章中,已经实现了加锁的逻辑,但是有个缺点,就是不可重入,任何重入锁的尝试都会导致死锁的发生,想了一下,这个问题可以解决。 Thinking 如何实现可重入? 首先锁信息(指redis中lockKey关联的value值) 必须得设计的能负载更多信息,之前non-ree...2016-09-30 16:44:04 · 495 阅读 · 0 评论 -
Javassist实现动态代理
Javassist实现动态代理 动态代理模式简述:之所以会出现代理这种模式就是因为我们常有这么一种需求:在被代理类的方法调用前后执行一些其它的逻辑,这些逻辑不适合由被代理类来实现,那这些逻辑谁来实现?当然是代理类。那代理类是谁?从哪里来?代理类是我们利用字节码生成工具动态创建的,然后利用反射实例化而得到代理对象。 tips:这篇文章讲的不是动态代理模式的思想而是怎么实现(简单实现...2016-10-02 12:56:52 · 383 阅读 · 0 评论 -
简单组合java.util.Map<K,V>实现Map<K,P,V>
简单组合java.util.Map<K,V>实现Map<K,P,V> java.util.Map<K,V>为单键对单值,有时需要双键对单值,因此基于Map<K,V>可以简单实现一个Map<K,P,V>。 接口定义:package cc.lixiaohui.demo.javassist.proxy.util;i...2016-10-06 12:06:46 · 196 阅读 · 0 评论 -
SnowFlake 分布式ID生成算法Java实现
SnowFlake 分布式ID生成Java实现SnowFlake不依赖第三方介质,不像基于ZK,Redis等,每次用完一个区间还得通过网络去获取下一个区间,效率较低,基于SnowFlake的分布式ID生成是目前我见过的最快的 SnowFlake生成的是一个64位的数字,其中42位时间戳,接下来10位是自定义的数,其作用就是区分集群中的所有机器,最后12位是毫秒内序列,集群内每个机器能...2016-12-27 11:45:46 · 310 阅读 · 0 评论 -
Java NIO 反应堆模式
Java NIO 反应堆模式简单模型一般NIO里反应堆模式都是这样:一个Acceptor(当然多个也行,不过一般场景一个够了)负责accept事件,把接收到Socket CHannel注册到按某种算法从Reactor池中取出的一个Reactor上,注册的事件为读,写等,之后这个Socket Channel的所有IO事件都和Acceptor没关系,都由被注册到的那个Reactor来负责。 ...2016-12-16 19:03:18 · 399 阅读 · 0 评论 -
从JVM指令层面看try-catch-finally返回值问题
从JVM指令层面看try-catch-finally返回值问题 貌似很多人对下面的方法的返回值都比较迷糊:package cc.lixiaohui.demo; public class ReturnValueTest { public int test() { int a; try { ...2016-10-22 13:12:33 · 128 阅读 · 0 评论 -
JVM 垃圾收集器
JVM 垃圾收集器 基本概念 Young Generation:新生代,hotspot vm中又细分为Eden和两个Survivor(from survivor和to survivor)Tenured Generation:老年代Minor GC:只GCyoung generation。Full GC、Major GC:一个意思,指GC整个heap,包括young...2016-10-15 10:05:50 · 134 阅读 · 0 评论 -
Java并发编程之线程池任务监控
Java并发编程之线程池任务监控 当我们提交runnable或者callable<?>到ThreadPoolExecutor时,我们是无法知道这些任务是在什么时候才真正的执行的,为了实现这个需求,我们需要扩展ThreadPoolExecutor,重写beforeExecute和afterExecute,在这两个方法里分别做一些任务执行前和任务执行后的相关监控逻辑,还有个te...2016-10-12 14:27:44 · 363 阅读 · 0 评论 -
JVM 栈帧
JVM 栈帧 一、栈帧 栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking)、方法返回值和异常分派(Dispatch Exception)。 栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛出了在方法内未被捕获的异常)都算作方法结束。栈帧的存储空间分配在Java虚拟机栈之中,每一个...2016-10-11 15:02:53 · 392 阅读 · 0 评论 -
JVM GC算法
JVM GC算法基础概念 GC Roots: The objects that a program can access directly are those objects which are referenced by local variables on the processor stack as well as by any static variables that...2016-10-10 15:27:25 · 124 阅读 · 0 评论 -
Java并发编程之volatile的理解
Java并发编程之volatile关键字的理解 Java中每个线程都有自己的工作内存,类比于处理器的缓存,线程的工作内存中保存了被该线程使用到的变量的主内存的拷贝。线程读写变量都是直接在自己的工作内存中进行的,而何时刷新数据(指将修改的结果更新到主存或者把主存的变量读取覆盖掉工作内存中的值)是不确定的。 volatile关键字是修饰字段的关键字,貌似...2016-10-08 16:47:20 · 90 阅读 · 0 评论 -
Java并发编程之CyclicBarrier的使用
Java并发编程之CyclicBarrier的使用 先看javadoc对这个类的说明:A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs inv...2016-08-26 15:53:56 · 105 阅读 · 0 评论 -
Java并发编程之异步Future机制的原理和实现
Java并发编程之异步Future机制的原理和实现 项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable看下面的代码:import java.util.concurrent.Callable;import java.util.concurrent...2016-08-23 17:10:31 · 851 阅读 · 0 评论 -
Http协议格式
Http协议格式 一、请求报文 包括请求行、请求头和请求数据,具体格式如下: 请求方法: GET: 请求指定的页面信息,并返回实体主体。 HEAD: 只请求页面的首部。 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。原创 2016-09-27 15:20:47 · 333 阅读 · 0 评论 -
Java 获取当前JVM进程ID
Java 获取当前JVM进程ID public static final int jvmPid() { try { RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); Field jvm = runtime.getClass().getDeclaredField("jvm"); jvm.set原创 2016-09-27 15:14:25 · 4507 阅读 · 0 评论 -
ActiveMQ入门示例
ActiveMQ入门示例 ActiveMQ有两种模式,点对点和发布/订阅模式,点对点中消息只能被一个消费者消费,而发布订阅中,消息可以被一群消费者消费,很好理解。下面的例子是点对点的 安装ActiveMQ很简单就不说了,客户端使用API只需添加以下依赖:Xml代码 dependency> groupId>org.apa原创 2016-08-27 14:47:34 · 622 阅读 · 0 评论 -
API笔记之java.nio.channels.SelectionKey
API笔记之java.nio.channels.SelectionKey Java代码 import java.nio.channels.SelectableChannel; import java.nio.channels.Selector; import java.util.concurrent.atomic.AtomicReferenceFie原创 2016-08-27 14:46:09 · 2034 阅读 · 0 评论 -
API笔记之java.nio.channels.Selector
API笔记之java.nio.channels.SelectorJava代码 import java.io.Closeable; import java.io.IOException; import java.nio.channels.spi.SelectorProvider; import java.util.Set; /**原创 2016-08-27 14:44:50 · 1000 阅读 · 0 评论 -
Maven打包可执行文件
Maven打包可执行文件Maven在默认情况,打包成的jar包是不可执行的,查看jar包是否可运行:打开jar包下的META-INF/MANIFEST.MF,里面若有Main-class: xxx的话就说明示可执行。而maven默认情况下打包完后是不含这一项的。要让maven打包成可执行的jar:在pom.xml的project元素下新增下面配置(若已有plugins节点,则直原创 2016-08-27 14:32:43 · 863 阅读 · 0 评论 -
Java并发编程之异步Future机制的原理和实现
Java并发编程之异步Future机制的原理和实现 项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable看下面的代码:Java代码 import java.util.concurrent.Callable; impo原创 2016-08-27 14:27:32 · 12963 阅读 · 13 评论 -
Java并发编程之volatile关键字的理解
Java并发编程之volatile关键字的理解 Java中每个线程都有自己的工作内存,类比于处理器的缓存,线程的工作内存中保存了被该线程使用到的变量的主内存的拷贝。线程读写变量都是直接在自己的工作内存中进行的,而何时刷新数据(指将修改的结果更新到主存或者把主存的变量读取覆盖掉工作内存中的值)是不确定的。 volatile关键字是修饰字段的关键字原创 2016-08-27 14:23:11 · 1026 阅读 · 0 评论 -
Socket Options
Socket Options以下出现中文的地方并不是对英文的翻译 1. SO_TIMEOUT 单位是毫秒,表示等待客戶端连接的最长时间。 Set a timeout on blocking Socket operations: ServerSocket.accept(); SocketInputSt原创 2016-09-27 15:21:55 · 504 阅读 · 0 评论 -
Java实现基于Redis的分布式锁
Java实现基于Redis的分布式锁 单JVM内同步好办, 直接用JDK提供的锁就可以了,但是跨进程同步靠这个肯定是不可能的,这种情况下肯定要借助第三方,我这里实现用Redis,当然还有很多其他的实现方式。其实基于Redis实现的原理还算比较简单的,在看代码之前建议大家先去这里看看原理,我就不翻译了,免得变味了,看懂了之后看代码应该就容易理解了。 时间统一问题:各个客户端加原创 2016-09-27 15:23:39 · 844 阅读 · 0 评论 -
Java实现基于Redis的分布式锁
Java实现基于Redis的分布式锁 单JVM内同步好办, 直接用JDK提供的锁就可以了,但是跨进程同步靠这个肯定是不可能的,这种情况下肯定要借助第三方,我这里实现用Redis,当然还有很多其他的实现方式。其实基于Redis实现的原理还算比较简单的,在看代码之前建议大家先去这里看看原理,我就不翻译了,免得变味了,看懂了之后看代码应该就容易理解了。 时间统一问题:各个客户端加原创 2016-09-27 19:56:55 · 2081 阅读 · 0 评论 -
Maven打包可执行文件
Maven在默认情况,打包成的jar包是不可执行的,查看jar包是否可运行:打开jar包下的META-INF/MANIFEST.MF,里面若有Main-class: xxx的话就说明示可执行。而maven默认情况下打包完后是不含这一项的。要让maven打包成可执行的jar:在pom.xml的project元素下新增下面配置(若已有plugins节点,则直接把plugin节点置于其下即可)...原创 2016-07-25 16:54:31 · 189 阅读 · 0 评论 -
Java 可重入自旋锁简单实现
自旋锁特点:1. 轻量级操作,无需挂起线程2. 特别吃CPU,如果线程在临界区的操作比较耗时或者线程对临界区的竞争很激烈,那还是老老实实用普通的锁以下是Java的简单实现public class SpinLock implements Lock { /** * 锁持有线程, null表示锁未被任何线程持有 */ private final AtomicRefe...原创 2018-05-15 16:04:09 · 2314 阅读 · 0 评论 -
简单组合java.util.Map<K,V>实现Map<K,P,V>
简单组合java.util.Map实现Map java.util.Map为单键对单值,有时需要双键对单值,因此基于Map可以简单实现一个Map。 接口定义:Java代码 package cc.lixiaohui.demo.javassist.proxy.util; import java.util.Collection;原创 2017-09-11 15:23:59 · 471 阅读 · 0 评论 -
Javassist实现动态代理
Javassist实现动态代理 动态代理模式简述:之所以会出现代理这种模式就是因为我们常有这么一种需求:在被代理类的方法调用前后执行一些其它的逻辑,这些逻辑不适合由被代理类来实现,那这些逻辑谁来实现?当然是代理类。那代理类是谁?从哪里来?代理类是我们利用字节码生成工具动态创建的,然后利用反射实例化而得到代理对象。 tips:这篇文章讲的不是动态代理模式的思想而是怎么原创 2017-09-11 14:29:45 · 566 阅读 · 0 评论 -
Java并发编程之线程池任务监控
Java并发编程之线程池任务监控 当我们提交runnable或者callable到ThreadPoolExecutor时,我们是无法知道这些任务是在什么时候才真正的执行的,为了实现这个需求,我们需要扩展ThreadPoolExecutor,重写beforeExecute和afterExecute,在这两个方法里分别做一些任务执行前和任务执行后的相关监控逻辑,还有个terminate原创 2017-09-11 14:27:48 · 2580 阅读 · 0 评论 -
JVM监控功能工具jstat的使用
JVM监控功能工具jstat的使用 格式jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ] GeneralOption-help:显示帮助信息-version:显示版本-options:显示所有的statOption 如果指定了ge原创 2017-09-08 14:07:28 · 306 阅读 · 0 评论 -
Java 实现基于Redis的分布式可重入锁
Java 实现基于Redis的分布式可重入锁之前在 Java实现基于的Redis的分布式锁 这篇文章中,已经实现了加锁的逻辑,但是有个缺点,就是不可重入,任何重入锁的尝试都会导致死锁的发生,想了一下,这个问题可以解决。 Thinking 如何实现可重入? 首先锁信息(指redis中lockKey关联的value值) 必须得设计的能负原创 2016-09-28 21:48:52 · 5728 阅读 · 1 评论