自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

转载 浅析若干Java序列化工具

转载http://blog.csdn.net/u013256816/article/details/50721421#comments   在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有:采用java对象的序列化和反序列化把对象包装成JSON字符串传输Google工具protoBuf的开源 本文章所需要的

2017-05-14 16:48:18 592

原创 自己实现Spring AOP(三)CGLib代理实现AOP

前言在自己实现Spring AOP(二)JDK代理实现AOP我用JDK代理方式实现了AOP功能,现在就要用CGLib方式实现一下。问题其实前面的实现会有两个问题第一个问题就是在edu.jyu.aop.ProxyFactoryBean.createJDKProxy()方法中,我要判断通知的类型,以决定目标方法的执行位置,这样子实在不容易扩展,如果我定义一个新的通知类型,比如说后置通知,那么我就要再另加

2017-05-12 16:20:16 1416

原创 自己实现Spring AOP(二)JDK代理实现AOP

前言上一篇文章自己实现Spring AOP(一)环境搭建及知识准备,我搭建好了项目也写了一个例子,接下来我就要实现这个例子中的AOP功能。在Spring中如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,如果目标对象没有实现接口,必须采用CGLib(Code Generation Library)方式,下面我就先用JDK的动态代理实现一下。准备工作在实现AOP功能前,先准备好要测试

2017-05-12 13:34:48 1426 1

原创 自己实现Spring AOP(一)环境搭建及知识准备

前言这个项目是基于JSpring IoC的,所以在看下去之前,你要确保看过之前实现JSpring IoC的文章(这些文章在我的博客分类JSpring IoC),不然也不看不出什么意思来,就不用浪费时间往下看了。在做这个项目的时候发生了一件有趣的事,我发现了JSpring IoC的一个Bug……,在 自己实现Spring IoC容器(四)IoC容器的Bug对这个Bug进行了介绍,也没什么,就是写错了一

2017-05-12 12:06:38 1661

原创 详解JUC之锁——LockSupport类(04)

LockSupportLockSupport看名字叫锁支持,这个玩意的功能跟wait和notify很像,它也是可以阻塞一个线程,然后又可以恢复一个线程,不过有个比较大的区别就是,wait让线程阻塞前,必获取到同步锁。而LockSupport这个哥们比较牛逼,随时随地随便阻塞当前线程,你给它一个线程它就敢让那个线程阻塞。它是通过park()方法阻塞当前线程的,park的意思就是停车咯,然后恢复线程就是

2017-05-11 17:25:51 1898

原创 详解JUC之锁——ReentrantLock类(03)

前言在详解JUC之锁——Lock与AQS(02)中我介绍了JUC锁的根基——AQS类还有公平锁和非公平锁,现在就可以正式介绍一下JUC锁家族其中的一个成员——ReentrantLockReentrantLockReentrantLock是一个互斥锁,也是一个可重入锁(Reentrant就是再次进入的意思)。ReentrantLock锁在同一个时间点只能被一个线程锁持有,但是它可以被单个线程多次获取,

2017-05-11 17:18:59 1239 6

原创 详解JUC之锁——Lock与AQS(02)

前言在详解JUC之锁——概述(01)中我对JUC中的锁进行了概述,下面我就介绍一下它们的根基Lock接口和AQS类Lock看名字就知道Lock接口就是JUC中锁的顶级接口,支持语义不同的锁规则,比如说公平锁和非公平锁,独占锁(也可以叫互斥锁)和共享锁等。它最主要的两个方法就是lock()和unlock(),一看就知道是获取锁和释放锁。还有一个比较有趣的方法是boolean tryLock(long

2017-05-11 17:07:03 1673

原创 详解JUC之锁——概述(01)

前言在详解JUC之原子类使用及实现中,我介绍了一下JUC中的原子类的使用和实现,现在我就来介绍一下JUC的重磅武器——锁(Lock)同步锁在说JUC中的锁之前,得先说一下它们的前辈——同步锁,有对比才有伤害嘛~同步锁的概念是,不同的线程可以访问一个同步锁,但是在同一个时间点,这个同步锁只能被一个线程获取,而想要却得不到它的线程就必须等待了,直到获取到它才能继续运行。Java是通过synchroniz

2017-05-11 10:45:35 1656 1

原创 自己实现Spring IoC容器(四)IoC容器的Bug

Bug的发现之前我自己写了一个类似Spring中的IoC容器 自己实现Spring IoC容器(三)完成IoC容器,然后最近想在这个项目基础上把Spring的AOP也实现一下,然后就悲剧的发现了一句错误代码……这个错误代码就在edu.jyu.core.ClassPathXmlApplicationContext类的Object createBeanByConfig(Bean bean)方法中,下面是

2017-05-10 10:53:20 3003 4

原创 详解JUC之原子类使用及实现

前言我在详解JUC之原子类概述这篇文章中介绍了一下原子操作和JUC包下的原子类的类型,现在我就来介绍第一种原子类类型——操作基本类型的原子类操作基本类型的原子类操作基本类型的原子类有3个AtomicInteger:操作int类型AtomicLong:操作long类型AtomicBoolean:操作boolean类型这些操作基本类型数据的原子类的使用是非常简单的,你对基本类型数据的操作,在这些

2017-05-09 12:27:41 1948

转载 JNI简介

转载http://www.cnblogs.com/eesijian/p/5843879.html 1. JNI简介  JNI是Java Native Interface的英文缩写,意为Java本地接口。  问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究)。  解决办法:Java使用JNI可以调用现

2017-05-09 09:47:33 636

转载 sun.misc.unsafe类的使用

转载http://blog.csdn.net/fenglibing/article/details/17138079    这个帖子是关于JAVA中鲜为人知的特性的后续更新,如果想得到下次在线讨论的更新,请通过邮件订阅,并且不要忘了在评论区留下你的意见和建议。    Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。如果你想搞破坏,可以使用Unsa

2017-05-09 09:42:30 639

转载 Java锁的膨胀过程和优化

首先说一下锁的优化策略。1,自旋锁自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定的情况,只能说总体上是一种优化。举个例子就好比一个人要上厕所发现厕所里面有人,他可以:1,等一小会。

2017-05-08 22:50:36 1472

转载 Java中CAS详解

转载http://blog.csdn.net/ls5718/article/details/52563959在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程

2017-05-08 22:39:32 855

原创 Java8特性系列文章目录

(1)详解Java8特性之Lambda表达式(2)详解Java8特性之方法引用(3)详解Java8特性之接口默认方法(4)详解Java8特性之Optional类(5)详解Java8特性之Stream API(6)详解Java8特性之Stream API补充(7)详解Java8特性之新的日期时间 API(8)详解Java8特性之Stream API并行流(9)详解Java8特性之重复注解其实Java8

2017-05-08 21:43:07 1892 2

原创 详解JUC之原子类概述

原子操作在讲 JUC (java.util.concurrent) 的原子类之前呢,我得先介绍一下原子操作在化学变化中,原子(Atom)是不能再分的一种粒子(在物理上还可以分为质子和电子),计算机中的原子操作是指不能分割成若干部分的操作,表示这个操作在执行过程中,是不能被中断的。比如说int i=0;是一个原子操作。而i++则可以分成两步操作,先是计算i+1的值然后第二步是将第一步的计算结果赋值给i

2017-05-08 18:54:28 1524

原创 一个小细节引起的悲剧——线程执行顺序错误

悲剧的故事今天在写博客的时候,想弄个例子说明一下非原子操作的线程安全问题,下面就是这个例子public class Main { public static void main(String[] args) { Counter counter = new Counter(); // 开启1000条线程让counter的count++,理想结果应该是1000

2017-05-08 17:24:06 785

原创 详解Java8特性之重复注解

重复注解注解(Annotation )是Java 5 推出来的,推出来后使用极其广泛,一些流行的框架基本都会用到注解实现一些功能,代替以前的配置方式,最典型的像Spring。在继续往下讲之前,我先声明你得知道注解的知识,我假设你已经掌握注解知识并能够自定义注解。在Java 8 之前,同一个注解是不能在一个位置上重复使用的,例如我定义了一个注解@MyAnnotationpackage edu.jyu.

2017-05-07 21:57:34 2665 1

原创 详解Java8特性之Stream API并行流

在详解Java8特性之Stream API中,我用的例子使用的都是顺序流,即单线程执行的,其实Stream API还提供了并行流,即多线程执行操作。java.util.Collection<E>新添加了两个默认方法default Stream stream() : 返回顺序流default Stream parallelStream() : 返回并行流可以发现,stream()和paralle

2017-05-07 19:50:28 12384 4

原创 详解Java8特性之新的日期时间 API

吐槽Java 8 提供了一套新的日期时间 API,为什么要这么干呢。因在旧版的 Java 中,日期时间 API 存在很多问题,比如说线程安全问题了, java.util.Date 是非线程安全的,所有的日期类都是可变的;又还有设计乱七八糟,你去看看java.util.Date类会发现它的很多方法都被标记过时了,就知道Sun公司自己人都看不过去了,而且用于格式化和解析日期类的类在java.text包下

2017-05-07 14:09:17 5633 3

原创 Fork/Join框架及其性能介绍

Fork/Join框架介绍Fork/Join框架是Java 7提供了的一个用于并行执行任务的框架, 大概是怎样子的呢,就是一个把大任务分割成若干个小任务,最终把每个小任务结果汇总起来得到大任务结果的框架。有点像是归并排序。下面的图就能很好地体现出来工作窃取模式(work-stealing)在讲Fork/Join框架使用前,得先介绍一下它所使用的线程模式——工作窃取模式,何为工作窃取模式,其实就是指一

2017-05-07 09:19:37 7146 8

原创 详解Java8特性之Stream API补充

上一篇文章我介绍了Java 8的Stream API 详解Java8特性之Stream API,忘记补充一点了,Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream(这样可以链式编程)。看下面例子@Testpublic void test() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); lis

2017-05-06 18:36:38 891

原创 详解Java8特性之Stream API

前言Java8中有两大最为重要的改变。第一个是Lambda表达式,还不了解的可以去这看看详解Java8特性之Lambda表达式另外一个则是Stream API,在java.util.stream下是什么Stream呢,很多地方说到它是处理集合的关键抽象概念,这样子说实在是太抽象了。这个Stream并不是我们以前认识的IO流,而是一个数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。集合专注的

2017-05-06 18:09:05 2434 3

原创 详解Java8特性之Optional类

Optional类在Java中,可能我们看过最多的异常就是java.lang.NullPointerException,这是使用null引用去调用一个方法或者字段的结果。Java 8中提供了java.util.Optional<T> 类,是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且 可以避免空指针异常。Optiona

2017-05-06 16:44:22 3214

原创 详解Java8特性之接口默认方法

是什么Java8中新增了接口的默认方法,简单来说就是让接口可以自己有实现方法,不许要实现类去实现。有什么用想象一种情况,你定义了一个接口A,假如里面有几个抽象方法。然后什么B,C,D,E…一大堆类去实现了A接口里面的几个抽象方法。那么现在问题来了,如果要在A中新加一个抽象方法,那么所有的实现类都要去实现这个抽象方法,不是很麻烦吗?这个时候默认方法就派上用场了,只需要再A中自己实现这个新添加的方法就好

2017-05-05 16:22:35 1967

原创 详解Java8特性之方法引用

前言在详解Java8特性之Lambda表达式 中我介绍了Java8中的Lambda表达式,通过Lambda表达式我们就可以快速地创建一个函数式接口的实例,可以说是大大简便了我们开发。你以为只能做到这么简便了嘛,big big wrong,大大的错,还可以再简便一点。有请我们今天的主角—方法引用在学习这个之前的得确保你已经学习过Lambda表达式了,因为这个是用在Lambda表达式的。方法引用方法引用

2017-05-05 12:49:15 19259 2

原创 详解Java8特性之Lambda表达式

前言Lambda表达式是Java8的一个特性,而Java8是2014发布的,那时候我刚上大学,还没认识Java呢。过了很长一段时间才学习了Lambda表达式,但是一直没怎么用过,已经忘了差不多了,所以现在特地复习一下。学一个东西我们得知道它是什么,有什么用,怎么用。是什么从不同角度上来说,Lambda表达式是一个语法糖,也可以说是匿名函数。语法糖何谓语法糖,我的理解是语法糖就是方便程序员开发的一个功

2017-05-05 10:09:44 3375

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除