
J2SE
文章平均质量分 94
ZhiYuanYe
.
展开
-
Java线程死锁
/* * 【线程死锁】 * 原因:两个线程相互等待被对方锁定的资源 */代码模拟:public class DeadLock { public static void main(String[] args) { Object obj = new Object(); Object obj1 = new Object(); DeadLo原创 2016-09-16 21:47:33 · 669 阅读 · 0 评论 -
在IDEA中创建Java 9 modules(模块)的Hello World
IntelliJ IDEA 2017.1 支持Java9的模块化特性 (Project Jigsaw)。 在此版本,模块文件中还支持基于特定名称与关键字的自动补全功能 code completion, 并且你可以快速斧正你项目中的模块化代码。So,那就让我们来一探究竟什么是模块化工程。首先,我们创建一个普通的模块工程 IntelliJ IDEA module 其中包含了改变世界的伟大的 “Hello翻译 2017-09-23 11:55:00 · 13728 阅读 · 6 评论 -
Java9新特性之HTTP2和REPL
对Java 9的炒作将不再局限于模块化(modularity),Java 9正在搜罗大量额外的功能模块,这些功能模块正作为Java增强提案(JEP)提交,并在OpenJDK (Java SE的参考实现项目)中实现。在这篇文章中,我们将重点关注一些或将在Java 9整个生命周期中,对开发者的工作生活影响最大的JEP,包括新的HTTP/2支持和JShell REPL(读取-求值-打印-循环),后者带来了转载 2017-09-23 15:46:38 · 4506 阅读 · 1 评论 -
Java9 modules (Jigsaw)模块化迁移
要点通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性。通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何依赖其他模块。对于已经使用了其他模块系统(如Maven或Gradle)的应用程序来说,还是有可能再加入JPMS。JDK为开发者提供了一些工具,用于将现有的代码迁移到JPMS。应用程序代码仍然可以依转载 2017-09-23 15:59:33 · 11734 阅读 · 5 评论 -
http2概述及Java9对其的支持
HTTP/2概述HTTP/2意在减轻为维护HTTP/1.1复杂的底层架构而带来的痛苦,以提高HTTP/1.1的性能。尽管HTTP/2仍然对HTTP/1.1向下兼容,但它已不再是一个基于文本的协议。当客户端通过HTTP/1.1请求建立一个连接时,所有请求将会被升级。从这一点上看,HTTP/2是用“二进制数据帧”来说话的。HTTP/2多路复用HTTP/2多路复用使得一个单独连接可以处理多个双向流,因而客转载 2017-09-23 16:05:21 · 6995 阅读 · 4 评论 -
Java9 HTTP2.0 API入门与实践
简述如果您需要使用Java语言来请求HTTP资源,那么你可能会遇到多种解决方案,你最终可能会以一种合理的方式来达成这个目的 —– 引用第三方包。好消息,好消息,黄鹤带着小姨子回来了,皮革厂有救了:Java9除了有模块化特性之外,还附带了一个全新的HTTP客户端API。不仅支持HTTP2.0,还提供了一套有亲和力的API。SO,让我们来剥掉小姨子神秘的蕾丝面纱。HTTP2.0是啥子东东?HTTP2.0翻译 2017-09-23 23:09:15 · 10129 阅读 · 9 评论 -
Java9 进程API
1. 概述Java中的进程API在Java5之前还是非常原始的,开启一个新进程唯一的方式是调用Runtime.getRuntime().exec() ,直到Java5发布之后,一些更加简明的开启新进程方式被封装到了ProcessBuilder 中。而在Java9中,你也将能使用一种全新的方式来获取当前系统所有正在运行的进程的相关信息。话不多说,先睹为快!2. 当前Java进程的信息我们通过调用ja翻译 2017-09-24 20:38:01 · 5293 阅读 · 4 评论 -
Java9 进程API详细介绍
官方在JEP 102中引进新的进程API来增强java.lang.Process 类,并且引进java.lang.ProcessHandle 及其嵌套接口Info 来让开发者逃离时常因为要获取一个本地进程的PID而不得不使用本地代码的窘境。本文将详细介绍这些新特性。1、ProcessHandle 与 ProcessHandle.InfoJava 9 为抽象Process 类增加了许多新方法,通过这些翻译 2017-09-24 22:09:44 · 7384 阅读 · 8 评论 -
Java9 集合工厂方法
使集合框架更便捷的工厂方法JEP269中提议,为集合框架增添一些工厂方法,来使创建不可变集合类与含有少量元素的Map变得更加便捷。下文就为什么它们应运而生来展开详细的阐述。集合框架增加工厂方法是必然的结果Java饱受其语法臃肿的批评,比如,创建一个小而确定的集合类时(比如一个List),需要使用它的构造方法,然后将它的引用存放在局部变量中,通过引用来多次调用add()方法之后, 最后才来封装这个集合翻译 2017-10-07 15:02:03 · 7264 阅读 · 2 评论 -
究竟什么是可重入锁?
经历很久之前就听说了可重入锁,可重入锁究竟是什么意思,以前是囫囵吞枣的,只要记住ReentrantLock和sychronized是可重入锁就行了,爱咋用咋用,好吧,原谅我的无知,最近对基础查漏补缺,发现竟然对其一问三不知,赶紧预习一波,觉得有必要写一篇博客来讲解,就当做什么都没有发生吧,嘿嘿。。。释义广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(原创 2017-10-22 23:20:41 · 51856 阅读 · 27 评论 -
一次线上问题排查:java.lang.OutOfmemoryError: PermGen Space
背景用基于Spring Boot(环境是java7)的系统做了一个报表导出的功能,第一次部署的时候用的默认JVM参数,但是测试人员在点击了一次导出之后,其他功能就疑似挂掉了,过了一会后才能正常使用;再点击导出,又出现这个问题,对这个问题的排查如下。jmap -heap pid查看堆内存使用情况Attaching to process ID 6082, please wait...Debugger原创 2017-10-25 16:49:28 · 6091 阅读 · 3 评论 -
JVM垃圾回收算法与参数配置
★引用计数法 这是个古老而经典的垃圾收集算法,其核心就是在对象被其他所引用时计数器+1,而当引用失效时-1,但是这种方式有非常严重的问题:无法处理循环引用的情况,还有就是每次进行加减操作比较浪费系统性能。★标记清除法 分为标记和清除两个阶段进行处理内存中的对象,当然这种方式也有非常大的弊端,就是空间碎片问题,垃圾回收后的空间不连续,不连续的内存空间工作效率低于连续的内存空间。★复制算法(java原创 2017-08-05 17:07:30 · 8740 阅读 · 0 评论 -
JVM参数初探
//———————堆参数———————-// (一)、 -XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志 -XX:+UseSerialGC 配置串行回收器 -XX:+PrintGCDetails 可以查看详细信息,包括各个区的情况 -Xms 设置最小堆 -Xmx 设置最大堆 -Xmx20m -Xms5m -XX:+PrintCommandLineFlags原创 2017-08-03 00:58:17 · 4208 阅读 · 1 评论 -
ReentrantLock与公平锁、非公平锁实现
前言最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是AbstractQueuedSynchronizer类的简称,Doug Lea上神在JDK1.5将其引入,这才有了现在的并发包java.util.concurrent,所以要理解ReentrantLock的原创 2017-10-22 01:04:46 · 13364 阅读 · 11 评论 -
Java9 基于异步响应式流的发布-订阅框架
为响应式流(Reactive Streams)增加的发布-订阅(publisher-subscriber)框架、并发包CompletableFuture类的增强,等等。。JEP266中为Java语言的并发性又引入许多新的方式:响应式流,一个为它而生互操作性更强的发布-订阅框架;并且为了Java9其他API而增强的 java.util.concurrent.CompletableFuture 类,翻译 2017-10-08 17:08:12 · 11715 阅读 · 4 评论 -
线程条件队列ConditionObject源码解读
小记 好久没更博,窗外光芒万丈,冬日的晚晨,多么美好,就不浪费了,循着键盘上的点点星辰,开工!啥子是条件队列?我们都知道,在万类之祖Object里面定义了几个监视器方法:wait(),notify (),notifyAll(),配合synchronized语义来控制线程的一些状态,在JDK1.5之后,由Lock替代了synchronized,而这几个监视器由条件队列Condition来实现原创 2017-11-26 15:13:31 · 2486 阅读 · 0 评论 -
Java 10 - 与“var类型推断机制”的第一次亲密接触
引言官方消息,Java 10 将在2018年3月20号正式发布。(我大Java 9 瞬间成了Vista……….)据传,官方在2017年12月14号已经完成了版本开发的主线合并。 迄今为止,在官方放出了Java 10少数新特性里面,局部变量类型推断(local-variable type inference) 绝对是备受万众瞩目的。它将我们常常在JS里面使用的var 变量引入到语言特性中,把我们原创 2018-01-18 23:41:09 · 20827 阅读 · 10 评论 -
Java 9 模块化(Modular)介绍
前言今年,2017年,我们将迎来 Java 语言的 22 岁生日,22岁,对于一个人而言,正是开始大展鸿图的年纪,可是对于日新月异的科技圈中的一门开发语言而言,却是一个傲视群雄的老态龙钟的年纪。感谢 互联居 的技术分享文章,有兴趣的朋友可以去搜索微信公众号 互联居JVM 语言发展史JVM 家族也是在这22年中茁壮发展,并且都秉承着 Java 的革命口号:一处编译,随处运行。那么,JVM 的带头转载 2017-09-23 01:47:23 · 9140 阅读 · 2 评论 -
Java 9 : 从零开始实现模块化(一)
Well, Java 9 is available so let’s make modules! 模块化在Java9中是炒鸡炒鸡重要的!今后,模块将是应用程序的基础构建单位。无论是使用动态语言或静态语言编写,模块都是应用程序的一个重要组成部分,且模块遵循单一功能原则。你可以将任意方法称为模块,正如函数式编程是基于模块一样。好了,总之,你get到这个点之后就记住:以后模块很重要很重要很重要 The i翻译 2017-09-23 02:42:33 · 24848 阅读 · 5 评论 -
源码角度分析HashMap与HashTable到底哪不同?
在网上看到一篇较好的文章,分享出来,其中有些地方加上了自己的理解。HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,下次被问到时,再也不会只说一个线程安全,一个非线程安全了,而是一撸袖子:闪开,老衲要装逼了!代码版本JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。1、时间HashTable转载 2016-09-30 09:22:26 · 733 阅读 · 0 评论 -
Java接口回调
java中接口是不可以直接创建实例的,如果把一个接口声明为一个变量,那么执行这个接口中的方法,接口没有实例是行不通的。但是java的“多态”给了我们契机,在调用这个方法的时候JVM会自动去找其子类,也就是调用其子类中实现的该方法,这是接口回调的本质。所以说,只需要给该变量指向其子类的地址就可以在调用的时候知道调用子类的方法。 举个例子,那么我们就可以在Test类中创建接口CallBackInter原创 2016-12-16 10:02:17 · 1033 阅读 · 1 评论 -
Java 代码性能优化
文章来源:http://blog.youkuaiyun.com/richard_jason/article/details/53004974 作者:Richard_Jason代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代转载 2016-12-15 11:12:24 · 493 阅读 · 0 评论 -
java中为什么类名可以直接调用静态方法?
因为该类的静态方法是程序启动时自动放在内存中了的,是属于程序的公共内存(但只能访问),而类名在这里你可以理解为命名空间。 先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。 房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家都用不了。 我们再看一看定义,java的静态变量也叫做类变量,它开始于类的创建,结束于类的消亡原创 2016-12-21 16:15:31 · 3834 阅读 · 1 评论 -
Java自定义异常类
为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写。我们常用的类ArithmeticException,NullPointerException,NegativeArraySizeException,ArrayIndexoutofBoundsException,SecurityException这些类,都是继续着RuntimeException这个父类,而这个父类还有一个父类是Ex原创 2017-02-19 22:55:20 · 1344 阅读 · 0 评论 -
Java常见异常笔记
有关类的异常: java.lang.ClassNotFoundException:找不到类异常,当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。 java.lang.ClassNotFoundException:指定的类不存在 这里主要考虑一下类的名称和路径是否正确即可。 java.lang.ClassCastException原创 2017-02-19 23:04:38 · 773 阅读 · 0 评论 -
Java中的main函数详细讲解
JAVA中的主函数是我们再熟悉不过的了,相信每个学习过JAVA语言的人都能够熟练地写出这个程序的入口函数,但对于主函数为什么这么写,其中的每个关键字分别是什么意思,可能就不是所有人都能轻松地答出来的了。我也是在学习中碰到了这个问题,通过在网上搜索资料,并加上自己的实践终于有了一点心得,不敢保留,写出来与大家分享。 主函数的一般写法如下: public static void main(String原创 2017-02-19 23:18:55 · 25955 阅读 · 0 评论 -
使用Lock,Condition解决三个线程依次轮流打印出75个数
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class CountTo_75 { public static void main(String[] args)原创 2017-01-26 22:10:37 · 851 阅读 · 0 评论 -
Java面试里关于try,catch,finally,return容易犯错的一个问题
import static java.lang.System.out;public class test { public static void main(String[] args) { out.print(tes()); } public static Boolean tes() { try { out.println原创 2017-02-23 13:06:16 · 1217 阅读 · 0 评论 -
JAVA中通过JNI调用C程序实例教程
JAVA是跨平台的语言,但在有些时候还是不得不调用本地代码,而且这些代码通常是C/C++写的,比如一某个手机的项目,需要JAVA程序在发送短信的时候和第三方的短信服务器连接。短信接口是用C++写的。需要用到JNI的主体部分。1、 在JAVA类中声明一个native方法: ① 新建JAVA工程testNative,包名packC,类名myNative,选择包含main方法 ② 创建nat原创 2016-09-11 11:10:54 · 4301 阅读 · 0 评论 -
JDK各版本新特性
next:原创 2017-02-23 21:44:02 · 1160 阅读 · 0 评论 -
JavaMail使用阿里云企业版邮箱发送邮件
第一步:添加依赖 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>第二步:复制粘贴、运行/** * 发送邮件原创 2017-03-09 16:05:23 · 12607 阅读 · 1 评论 -
如何对List分段操作
问题:假设A系统查询出来一个很大很大的List,现在B系统想要得到这个List来导出报表,但是B系统部署环境条件有限,内存容不下这么大一个List,这时候我们就需要把List切分,然后再一个一个导出了。如果按照传统方式,可能会比较繁琐,我们可以运用List里面的subList方法来实现,代码如下:import java.util.ArrayList;import java.util.List;pu原创 2017-06-19 18:14:07 · 8087 阅读 · 0 评论 -
Java中对象都是分配在堆上吗?你错了!
我们在学习使用Java的过程中,一般认为new出来的对象都是被分配在堆上,但是这个结论不是那么的绝对,通过对Java对象分配的过程分析,可以知道有两个地方会导致Java中new出来的对象并不一定分别在所认为的堆上。这两个点分别是Java中的逃逸分析和TLAB(Thread Local Allocation Buffer)。本文首先对这两者进行介绍,而后对Java对象分配过程进行介绍。1. 逃逸分析1转载 2017-08-07 09:14:19 · 18102 阅读 · 6 评论 -
深入分析ConcurrentHashMap的锁分段技术
术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。转载 2017-08-18 10:55:58 · 9448 阅读 · 0 评论 -
CPU-bound(计算密集型) 与 I/O-bound(I/O密集型)
前言在一个技术交流群里面看到有人在问,如何设置应用的线程池大小?有人回复了说,不谈并发类型(计算密集型或者IO密集型)的话,这个问题纯属瞎扯淡。下面是一些个人理解与在网上看到的比较好的解释。1、CPU-bound(计算密集型)计算密集型是说需要这个应用的运行需要充分运用CPU资源,比如说Hadoop离线处理应用、Storm清洗项目、视频图片渲染等等,CPU运算资源都被用来进行逻辑计算,这里引发线程池原创 2018-05-09 17:21:29 · 3709 阅读 · 0 评论