
Java高级
Java高级
猎人在吃肉
这个作者很懒,什么都没留下…
展开
-
Java gson反序列化时,Json字符串中含有浮点类型(0.000001)时,在反序列化转换成Map时,会变成科学记数法
使用Gson进行Json字符串与Java Map对象间转换时,Json字符串里 如果是numberic(double、long、int),Gson会在转成java对象时将该属性默认认为是Double类型,就会出现变成科学记数法的问题。如果你是学习或者小型项目,Gson使用出现浮点转换科学记数法的问题,可以换成FastJson 工具或者其它工具,就能解决此问题。已运行的大型项目中,字符串转Map使用Gson工具类进行转换,不敢贸然使用其它工具类(如FastJson),这是前提。解决方法是进行数据进行保装。原创 2024-01-10 10:38:32 · 1407 阅读 · 0 评论 -
Lock、ReentrantLock实现生产者,消费者的面试题
package com.aop8.proAndcum;import java.util.Random;import java.util.Vector;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock...转载 2019-02-13 18:23:36 · 1879 阅读 · 0 评论 -
Netty 权威指南笔记:Java NIO 和 Netty 对比
Netty 权威指南笔记(一):网络 I/O 模型和 Java NIO 入门https://blog.csdn.net/hustspy1990/article/details/78385935Netty 权威指南笔记(二):Java NIO 和 Netty 对比https://blog.csdn.net/hustspy1990/article/details/78393538...转载 2019-02-28 14:38:02 · 1905 阅读 · 0 评论 -
Executor、ExecutorService 和 Executors 三者的继承关系 和 不同点
Executor,ExecutorService,Executors 最主要的区别是 Executor 是一个抽象层面的 **根接口**。ExecutorService 接口 对 Executor 接口进行了扩展,提供了返回 Future 对象,终止,关闭线程池等方法。当调用 shutDown 方法时,线程池会停止接受新的任务,但会完成正在 pending 中的任务。`Executors` 是一个工具类,类似于 `Collections` 、`Arrays` 等 。提供工厂方法来创建不同类型的线程池,比如转载 2019-02-13 15:09:07 · 2966 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier 区别
这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧CyclicBarrier 和 CountDownLatch 都位于 java.util.concurrent 这个包下 CountDownLatch CyclicBarrier 减计数方式 加计...转载 2018-04-09 23:10:23 · 729 阅读 · 2 评论 -
基于Java NIO框架区别对比
一、通信框架流行基于Java NIO通信框架有Mina、Netty、Grizzly等。接下来说下它们之间的对比。二、它们的出身1、Mina 出身于开源界的大牛Apache组织;2、Netty 出身于商业开源大亨Jboss;3、Grizzly 则出身于土鳖Sun公司。三、它们的设计理念1、MinaMina(Multipurpose Infrastructure for Network...转载 2019-02-28 11:25:50 · 597 阅读 · 0 评论 -
Callable 和 Runnable 的 区别(简单分析)
1、区别不同点 Callable Runnable 方法 V call() throws Exception run() 返回值 V call() 有返回值 void run() 没有返回值 异常 call() 可以抛出受检查的异常 run() 不能抛出异常 启动 1、使Thread 来包装,使用...转载 2014-12-09 10:53:44 · 6916 阅读 · 0 评论 -
NIO——非阻塞式IO (SocketChannel、DatagramChannel ) 学习
一、使用 NIO 完成网络通信的三个核心:通道(Channel):负责连接 java.nio.channels.Channel 接口: |--SelectableChannel |--SocketChannel |--ServerSocketChannel |--DatagramChannel |--Pipe.SinkChannel |--Pipe.SourceCh...原创 2019-02-28 10:00:24 · 931 阅读 · 0 评论 -
ForkJoin demo 示例
package com.aop8.forkjoin;import java.time.Duration;import java.time.Instant;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;import java.util.stream.LongStream...原创 2019-02-21 13:51:47 · 836 阅读 · 0 评论 -
3个线程 交替换打印,lock.newCondition()、Condition的使用例子
编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归package com.aop8.lock1;import java.util.Random;import java.util.concurrent.TimeUnit;import java.util....原创 2019-02-13 23:38:19 · 3601 阅读 · 0 评论 -
为什么不推荐通过Executors直接创建线程池
阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式。这是为什么?Executors 底层其实是使用的 ThreadPoolExecutor 的方式 创建的,但是使用的是 ThreadPoolExecutor 的默认策略,即 AbortPolicy。//默认策略 private static final Re...原创 2019-02-14 13:48:09 · 6592 阅读 · 0 评论 -
java获取反射机制的三种方式
java 获取反射机制的三种方式:new对象 实现反射机制路径类名代码示例建立一个学生类:package com.aop8.reflect;public class Student { private int id; String name; protected boolean sex; public float score;}获取反射机制:package com...转载 2019-02-20 14:25:23 · 596 阅读 · 0 评论 -
LockSupport 使用总结和注意事项
0、前提看此文章的前提是必须已经学习了 LockSupport 的基本语法和了解 LockSupport 的 API的基本使用。一、简单在没有LockSupport之前,线程的挂起和唤醒咱们都是通过Object的wait和 notify/notifyAll 方法实现。写一段例子代码,线程A执行一段业务逻辑后调用wait阻塞住自己。主线程调用notify方法唤醒线程A,线程A然后打印自己执行...转载 2019-05-07 12:09:03 · 2785 阅读 · 3 评论 -
java LockSupport 方法使用 和总结
参考文章:https://blog.csdn.net/black_bird_cn/article/details/82624373https://blog.csdn.net/secsf/article/details/78560013文章目录一、LockSupport中的一些基本方法二、LockSupport 基本特征三、LockSupport与其他锁的比较四、示例park() 阻塞park...转载 2019-05-07 12:07:17 · 3950 阅读 · 4 评论 -
Java Unsafe类 学习
1 Unsafe类介绍JDK 的 rt.jar 包中的 sum.msic.Unsafe 类提供了硬件级别的原子性操作,Unsafe 类中的方法都是native 方法,它们使用 JNI 的方式访问本地C++ 实现库。Unsafe类不属于Java标准,但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Hadoop、Kafka等。使用Uns...转载 2019-05-06 13:20:32 · 678 阅读 · 0 评论 -
Java中的锁分类的介绍 —— 公平锁/非公平锁、可重入锁、自旋锁、读写锁、分段锁、偏向锁等
文章目录1、乐观锁/悲观锁2、公平锁/非公平锁3、独享锁/共享锁4、可重入锁5、自旋锁6、互斥锁/读写锁7、分段锁8、偏向锁/轻量级锁/重量级锁在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:乐观锁/悲观锁公平锁/非公平锁独享锁/共享锁可重入锁自旋锁互斥锁/读写锁分段锁偏向锁/轻量级锁/重量级锁上面是很多锁的名词,这些分类...转载 2019-04-30 11:18:57 · 846 阅读 · 1 评论 -
java.util.concurrent(JUC)包的简介
文章目录1、阻塞队列BlockingQueue2、阻塞双端队列BlockingDueue3、阻塞转移队列TransferQueue4、并发容器5、线程池6、线程分叉与合并7、锁8、原子类型9、并发工具Java 8并发工具包由3个包组成,分别是 java.util.concurrent、java.util.concurrent.atomic 和 java.util.concurrent.locks...转载 2019-04-29 15:04:56 · 344 阅读 · 0 评论 -
java.util.concurrent(JUC)包中的阻塞队列(全部)
文章目录1、阻塞队列1.1、BlockingQueue 接口1.1.1、BlockingQueue 用法1.1.2、 BlockingQueue 的方法1.1.3、BlockingQueue 的实现类1.1.4、 BlockingQueue 使用例子1.2、数组阻塞队列 ArrayBlockingQueue1.3、延迟队列 DelayQueue1.4、链式阻塞队列 LinkedBlockingQu...转载 2019-04-27 18:55:13 · 895 阅读 · 0 评论 -
Java JVM虚拟机学习的经典书籍
1、深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题的技巧和实践2、揭秘Java虚拟机:JVM设计原理与实现《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解...转载 2019-02-20 21:55:47 · 7517 阅读 · 0 评论 -
NIO —— Buffer(缓冲区) 存储和读取数据
一、Buffer(缓冲区):在 Java NIO 中负责数据的存取(存储和读取)。缓冲区就是数组。用于存储不同数据类型的数据根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:ByteBufferCharBufferShortBufferIntBuffer (记住没有 IntegerBuffer)LongBufferFloatBufferDoubleBuffera...原创 2019-02-26 11:39:17 · 3042 阅读 · 0 评论 -
队列 LinkedBlockingQueue
1 apijava.util.concurrent包下的新类。LinkedBlockingQueue 就是其中之一,是一个阻塞的线程安全的队列,底层采用 链表 实现。LinkedBlockingQueue 构造的时候若没有指定大小,则默认大小为 Integer.MAX_VALUE ,当然也可以在构造函数的参数中指定大小。LinkedBlockingQueue 不接受null。添加元素的方法...转载 2019-02-15 15:34:46 · 1617 阅读 · 0 评论 -
java占位符
1、键值 (key/value)占位符import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main5 { public static void main(String[] args) { M...原创 2018-11-19 15:14:14 · 2187 阅读 · 0 评论 -
quartz 2.x 表结构说明
一、quartz 表说明 序号 表名 说明 1. qrtz_calendars 以 Blob 类型存储 Quartz 的 Calendar 信息 2. qrtz_cron_triggers 存储 Cron Trigger,包括 Cron 表达式和时区信息 3. qrtz_fired_triggers 存储与已触发的 Trigge...原创 2018-02-09 15:24:54 · 10933 阅读 · 1 评论 -
java序列化框架
我们为什么要序列化举个例子: 下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放。 那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列化。 我们要用的时候,就需要将字节流重构成对象,这叫反序列化。 不知道我这么说大家能不能理解。java序列化的缺点java自己提供序列化而且用起来也非常简单,但是在远程服务调用中很少用它,主要存在以转载 2017-11-26 22:39:53 · 469 阅读 · 0 评论 -
Hystrix是什么
Hystrix是什么? 官方地址:https://github.com/Netflix/Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟、异常,引起资源耗尽导致系统不可用的解决方案。在分布式系统,我们一定会依赖各种服务,那么这些个服务一定会出现失败的情况,Hystrix就是这样的一个工具,它通过提供了逻辑上延时和错误容忍的解决力来转载 2017-11-26 21:48:51 · 4242 阅读 · 0 评论 -
java文件压缩、解压工具类
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.GZIPInputStream;im转载 2017-12-04 13:57:15 · 419 阅读 · 0 评论 -
Marshalling在netty中的基本使用(Hello World)
Client 客户端ClientHandler 客户端处理类MarshallingCodeCFactory 编解码工厂类Request 请求数据对象Response 响应数据对象Server 服务端ServerHandler 服务端处理类 JBoss Marshalling的官网: http://jbossmarshalling.jboss.org/downloads Mars转载 2017-12-03 16:21:52 · 807 阅读 · 0 评论 -
Protocol Buffers (protobuf)简介
1、简介 Protocol Buffers(简称protobuf)是google (谷歌)的一项技术,它跟JSON,XML一样,是一个规定好的数据传播格式。用于将结构化的数据序列化、反序列化,经常用于网络传输。这货实际上类似于XML生成和解析,但protobuf的效率高于XML,不过protobuf生成的是字节码,可读性比XML差。类似的还有json、Java的Serializable等。pr转载 2017-11-21 21:16:39 · 820 阅读 · 0 评论 -
Runnable、Callable、Future和FutureTask的说明
Runnable、Callable和Future的区别:一个不返回结果、一个产生结果,一个拿到结果。 Runnable Callable Future 无返回值 有返回值 拿到异步返回的结果Runnable Runnable 在java.lang包下,它是一个接口,只声明了一个run()方法:public interface Runnable { public转载 2017-12-03 17:48:10 · 533 阅读 · 0 评论 -
8个java 网络编程框架介绍
自从JDK1.4中有了NIO以后,这个方面越来越活跃,也为java赢得更多开发者的支持。 做java网络编程需要掌握一些基本的知识和技能:套接字编程、阻塞/非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务 等等。笔者在此只整理以下一些转载 2017-11-20 22:32:47 · 17472 阅读 · 0 评论 -
quartz 2.x 定时任务创建,修改,删除,执行的工具类
import com.google.gson.Gson;import com.aop8.common.exception.ServerException;import com.aop8.common.utils.Constant.ScheduleStatus;import com.aop8.modules.admin.job.entity.ScheduleJobEntity;import...原创 2018-02-09 16:02:12 · 1228 阅读 · 0 评论 -
java的3种动态代理 —— jdk、 javassist、cglib动态代理
jdk自带动态代理实现javassist实现动态代理cglib实现动态代理最近想总结一下java的动态代理,动态代理有很多种实现方案,下面介绍三种最常用的动态代理方案:1.jdk 自带动态代理2.javassist 实现动态代理3.cglib 实现动态代理接口和实现类代码:package com.java.day1.dynamicproxy.one;...转载 2018-03-08 09:32:57 · 2393 阅读 · 0 评论 -
Lock ReentrantLock 示例,解决 虚假唤醒
Lock ReentrantLock 示例,解决 虚假唤醒原创 2018-08-17 21:22:19 · 1306 阅读 · 1 评论 -
解决double转 BigDecimal 时出现的精度失真问题
解决 double 转 BigDecimal 时出现的精度问题比如,double dd=344999.03d;转成 BigDecimal 类型,BigDecimal ss=new BigDecimal(dd);最后,ss的值是344999.03000000002793967723846435546875失真了。解决方法是先将dd 转换字符串,然后转换成 BigDecimal 。/...原创 2018-10-24 16:11:06 · 5336 阅读 · 0 评论 -
synchronized 面试题 ---- 生产者、消费者
/** * 面试题 ---- 生产者、消费者 * */public class TestProductorAndConsumer { public static void main(String[] args) { Clerk clerk=new Clerk(); Productor pro=new Productor(clerk); ...原创 2018-08-17 19:38:11 · 395 阅读 · 0 评论 -
非静态同步方法和静态同步方法 对锁的持有
一、代码package com.aop8.testJava;import java.util.concurrent.TimeUnit;/** * * <pre> * 1. 两个普通同步方法,两个线程,标准打印,打印? //one two * 2. 新增 Thread.sleep() 给getOne() ,打印? // one two * ...转载 2018-08-18 10:32:38 · 656 阅读 · 0 评论 -
读写锁 ReadWriteLock
读写锁 ReadWriteLockpackage com.aop8.testJava;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * 读写锁 ReadWriteLock * */public cla...原创 2018-08-18 10:30:12 · 195 阅读 · 0 评论 -
volatile 关键字
volatile 关键字package com.aop8.testJava;import java.util.concurrent.TimeUnit;/** * 一、volatile 关键字:当多个线程进行操作共享数时,可以保证内存中的数据可见 * */public class TestVolatile { public static void main(S...原创 2018-08-18 10:29:41 · 266 阅读 · 0 评论 -
原子变量与CAS算法 AtomicInteger
package com.aop8.testJava;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** * <pre> * 二、原子变量:JDK1.5后,java.util.concurrent.atomic包下提供了常用的原子变量: * ...原创 2018-08-18 08:24:15 · 358 阅读 · 0 评论 -
Lock ReentrantLock Condition 面试题----线程按序交替
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 面试题 ---- 线程按序交替 */public class TestABCAlternate { ...转载 2018-08-17 22:36:54 · 811 阅读 · 0 评论