java核心
文章平均质量分 83
风云叶易
年轻没有失败
展开
-
Spring源码分析 从web.xml 中ContextLoaderListener看Spring 容器与web容器联系
Spring IOC容器如何与web容器建立联系,使得在web环境下能运用Spring 容器去管理对象,这要从web.xml配置文件中的ContextLoaderListener说起。它是Spring容器与web容器建立联系的入口,这里就先抛砖引玉啦转载 2016-08-29 11:30:56 · 1504 阅读 · 1 评论 -
深入 Java 内存模型(2)
深入 Java 内存模型(2)主内存与工作内存Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java 内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋转载 2016-09-30 12:03:58 · 308 阅读 · 0 评论 -
google Guava包的ListenableFuture解析
并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK concurrent包下的Future 接口。我们强烈地建议你在代码中多使用ListenableFuture来代替JDK的 Future, 因为:大多数Futures 方法中需要它。转到ListenableFuture原创 2016-09-30 13:44:09 · 7151 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口j转载 2016-09-30 14:27:52 · 339 阅读 · 0 评论 -
如何为JVM添加关闭钩子与简要分析
最近在看当当开源的数据库分库分表框架Sharding-jdbc的源码,在看ExecutorEngine类时,遇到了很多没用过的JDK api,Sharding-jdbc内部大量的使用了google的工具包Guava。在ExecutorEngine类处理多线程问题部分也同样用到的Guava下面的util.concurrent包的类进处理。而我在看google的Guava的MoreExecutors时便遇到了Runtime.getRuntime().addShutdownHook(hook)。原创 2016-09-30 18:12:48 · 4321 阅读 · 0 评论 -
使用Guava进行函数式编程
本文翻译自Getting Started with Google Guava这本书,如有翻译不足的地方请指出。在这一章,我们开始注意到使用Guava进行编写代码会更加简单。我们将看看如何使用Guava当中的接口和类可以帮助我们,通过应用行之有效的模式,以使我们的代码更容易维护以及健壮。 在本章中我们将包含一下几点:Function接口:这说明在java编程当中可以引入函转载 2016-10-18 09:38:30 · 1521 阅读 · 0 评论 -
MySQL的JDBC驱动源码解析 预编译开启
一、背景 现在我们淘宝持久化大多数是采用iBatis+MySQL做开发的,大家都知道,iBatis内置参数,形如#xxx#的,均采用了sql预编译的形式,举例如下: SELECT * FROM user WHERE id =#id# 查看日志后,会发现这个sql执行时被记录如下,SELECT * FROM user WHERE id =转载 2016-10-27 17:45:52 · 2795 阅读 · 0 评论 -
成为JavaGC专家(1)—深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当转载 2016-10-29 19:59:43 · 547 阅读 · 0 评论 -
成为JavaGC专家(2)—如何监控Java垃圾回收机制
本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在本文中,我将解释JVM到底是如何执行垃圾回收处理的。什么是GC监控?垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明转载 2016-10-29 20:05:07 · 440 阅读 · 0 评论 -
Java垃圾回收机制
Java的内存分布在JVM中,内存是按照分代进行组织的。其中,堆内存分为年轻代和年老代,非堆内存主要是Permanent区域,主要用于存储一些类的元数据,常量池等信息。而年轻代又分为两种,一种是Eden区域,另外一种是两个大小对等的Survivor区域。之所以将Java内存按照分代进行组织,主要是基于这样一个“弱假设” - 大多数对象都在年轻时候死亡。同时,将内存按照分代进行组织,转载 2016-10-29 20:35:15 · 867 阅读 · 0 评论 -
mybatis-Spring ClassPathMapperScanner源码分析(自定义注解加载Bean)
摘要:在使用mybatis时,可以通过mybatis-spring的MapperFactoryBean来配置一系列的DAO接口,MapperFactoryBean的getObject方法能返回DAO接口对应的动态代理类,实际是通过DefaultSqlSession以动态代理的方式生成DAO接口的实现类。而当DAO类很多时,可以通过mybatis-spring的MapperCannerConfi原创 2016-10-31 12:41:48 · 7362 阅读 · 0 评论 -
ResultSet 状态详解
这篇文章并没有给出如何使用ResultSet的具体例子,只是从ResultSet的功能性上进行了详细的讲述。希望这篇文章对大家理解ResultSet能够有所帮助。下面就是这篇文章的具体内容。 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。转载 2016-11-01 15:23:44 · 3178 阅读 · 1 评论 -
java并发-ReentrantLock的lock和lockInterruptibly的区别
ReentrantLock的加锁方法Lock()提供了无条件地轮询获取锁的方式,lockInterruptibly()提供了可中断的锁获取方式。这两个方法的区别在哪里呢?通过分析源码可以知道lock方法默认处理了中断请求,一旦监测到中断状态,则中断当前线程;而lockInterruptibly()则直接抛出中断异常,由上层调用者区去处理中断。 lock操作 lo转载 2017-01-18 10:57:59 · 1654 阅读 · 0 评论 -
LinkedBlockingQueue的双锁,源码分析
概述LinkedBlockingQueue是java concurrent包提供的另一个多线程安全的阻塞队列,与ArrayBlockingQueu相比,此队列的使用链表实现(不熟悉链表的同学,请查阅大学的数据结构课本),可以提供高效的并发读写性能。数据结构链表节点既然是链表,那么肯定少不了节点,节点自然包括节点内容和next指针。jdk开发人员,设计的节点是转载 2017-01-19 17:42:40 · 1677 阅读 · 0 评论 -
并发新特性—信号量 Semaphore
并发新特性—信号量 Semaphore在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作用,通过对信号量的不同操作,可以分别实现进程间的互斥与同步。当然它也可以用于多线程的控制,我们完全可以通过使用信号量来自定义实现类似 Java 中的 synchronized、wait、notify 机制。Java 并发包中的信号量 Semaphore 实际上是一个功转载 2016-09-30 10:53:42 · 385 阅读 · 0 评论 -
并发新特性—障碍器 CyclicBarrier
并发新特性—障碍器 CyclicBarrierCyclicBarrier(又叫障碍器)同样是 Java 5 中加入的新特性,使用时需要导入java.util.concurrent.CylicBarrier。它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结束前一直阻塞等待,直到该组任务全部执行结束,这个任务才得以执行。这非常像 CountDo转载 2016-09-30 10:48:27 · 295 阅读 · 0 评论 -
并发新特性—阻塞队列与阻塞栈
并发新特性—阻塞队列与阻塞栈阻塞队列阻塞队列是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue 等,用法大同小异,具转载 2016-09-30 09:53:07 · 366 阅读 · 0 评论 -
Class#getResource与ClassLoader#getResource分析
Class类中的getResource与ClassLoader类中的getResource方法很容易混淆,今天又重新看一下源码,简单的记录一下。原创 2016-08-29 11:32:36 · 668 阅读 · 0 评论 -
Base64编码详解
开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编解码器,方便阅读文章的同时来实验。 一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的转载 2016-09-12 16:15:59 · 409 阅读 · 0 评论 -
Spring bean ApplicationContext BeanFactory 生命周期
Spring Bean 生命周期任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉的应该是servlet 的生命周期吧。和 servlet 一样 spring bean 也有自己的生命周期。本文我就向大家讲述 spring bean 的生命周期,这个对理解 spring 框架有非常好的作用。大家应该知道spring 中有几种供 springbean 生存的容器转载 2016-08-31 10:28:57 · 966 阅读 · 0 评论 -
mysql explain用法
mysql explain用法explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了,如:explain select * from statuses_status where id=11;explain列的解释table:显示这一行的数据转载 2016-09-14 10:30:00 · 246 阅读 · 0 评论 -
分组加密的四种模式
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称加密又分为分组加密和序列密码。分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。序列密码,也叫流加密(s转载 2016-09-13 09:24:32 · 2687 阅读 · 0 评论 -
CLH锁
CLH锁即Craig, Landin, and Hagersten (CLH) locks,CLH锁是一个自旋锁,能确保无饥饿性,提供先来先服务的公平性。CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋。SMP(Symmetric Multi-Processor),即对称多处理器转载 2016-10-10 14:21:17 · 759 阅读 · 0 评论 -
Sonar简介
Sonar简介Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测sonarQube能带来什么?Developers' Seven Deadly Sins1.糟糕的复杂度分转载 2016-10-13 13:51:03 · 1462 阅读 · 1 评论 -
YAML 语言教程
编程免不了要写配置文件,怎么写配置也是一门学问。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。本文介绍 YAML 的语法,以 JS-YAML 的实现为例。你可以去在线 Demo 验证下面的例子。一、简介YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。它的转载 2016-10-14 18:01:59 · 807 阅读 · 0 评论 -
Guava学习笔记:EventBus
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式。手工实现一个Observer也转载 2016-09-29 13:53:57 · 346 阅读 · 0 评论 -
ExecutorService的十个使用技巧
1. 线程命名这点得反复强调。对正在运行的JVM进行线程转储(thread dump)或者调试时,线程池默认的命名机制是pool-N-thread-M,这里N是线程池的序号(每新创建一个线程池,这个N都会加一),而M是池 里线程的序号。比方说,pool-2-thread-3指的是JVM生命周期中第二个线程池里的第三个线程。这样的名字表述性不佳。由于JDK将命名机制都隐藏在 Thread转载 2016-09-29 17:30:07 · 2128 阅读 · 0 评论 -
并发新特性—Executor 框架与线程池
Executor 框架简介在 Java 5 之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor 框架便是 Java 5 中引入的,其内部使用了线程池机制,它在 java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在 Java 5之后,通过 Executor 来启动线程比使用 Thread 的 start原创 2016-09-29 17:44:24 · 327 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore共同之处与区别以及各自使用场景
摘要: jdk1.5之后,java的concurrent包提供了一些并发工具类,比如CountDownLatch和CyclicBarrier,Semaphore。这里简要的比较一下他们的共同之处与区别,同时介绍一下他们的使用场景。 CountDownLatch:一个线程A或是组线程A等待其它线程执行完毕后,一个线程A或是组线程A才继续执行。CyclicBarrier:一组线程使用await()原创 2016-10-26 10:55:09 · 8799 阅读 · 3 评论 -
并发新特性—Lock 锁与条件变量
并发新特性—Lock 锁与条件变量简单使用 Lock 锁Java 5 中引入了新的锁机制——java.util.concurrent.locks 中的显式的互斥锁:Lock 接口,它提供了比synchronized 更加广泛的锁定操作。Lock 接口有 3 个实现它的类:ReentrantLock、ReetrantReadWriteLock.ReadLock 和 ReetrantR转载 2016-09-30 09:19:38 · 833 阅读 · 0 评论 -
CLH锁与MCS锁
一。引文1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP能够保证内存一致性,但这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致C转载 2017-06-14 09:44:36 · 2501 阅读 · 0 评论