- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 Spring AOP框架学习笔记(2):AOP拦截器调用的实现
下面我们介绍一下JdkDynamicAopProxy的invoke拦截。JDK动态代理的生成调用为:Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);这里的this参数对应的是InvocationHandler对象,InvocationHandler是JDK定义的放射类的一个接口,这个接口定义了invoke方法,而这个
2015-08-20 17:15:52
784
原创 Spring AOP框架学习笔记(1):AOP代理对象的建立
Aop的几个概念:1.Advice(通知)定义在连接点做什么,为切面增强提供织入接口。在Spring AOP中,主要描述Spring AOP围绕方法调用而注入的切面行为。下图是Advice的类层次图。 2.Pointcut(切点)决定Advice通知应该作用于哪个连接点,也就是说通过Pointcut来定义需要增强方法的集合。 3.Advisor(通知器)用来完成对目标方法的切面
2015-08-20 16:33:57
780
原创 Java并发编程实战笔记(四):基础构建模块
委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。1.同步容器类JDK中的同步容器类包括Vector和Hashtable等类,这些类实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。当多个线程同时访问修改容器时,可能会产生一些意料之外的行为,如public static Object getLa
2015-08-19 00:04:38
456
原创 Java并发编程实战笔记(三):对象的组合
这里介绍一下组合模式。编写线程安全的类的一个重要的思路就是,将一些现有的线程安全组件组合为更大规模的组件或者程序。在设计线程安全类的过程中,需要包含以下三个基本要素:1.找出构成对象状态的所有变量。2.找出约束状态变量的不变性条件。3.建立对象状态的并发访问管理策略。收集同步需求要确保类的线程安全性,就需要确保它的不变性条件不会在并发访问的情况下被破坏。同样,在操作中还
2015-08-18 19:08:39
667
原创 Java并发编程实战笔记(二):对象的共享
可见性为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。缺乏同步的程序中可能产生错误结果的一种情况:失效数据。加锁的含义不仅仅局限于互斥行为,还包含内存可见性。为了确保所有线程都能看到共享变量的最新值,所有执行读操作或者写操作的线程都必须在同一个锁上同步。Java提供了一种稍弱的同步机制,即volatile变量,用来确保变量的更新操作通知到其他线程。当把变量声明为volatile类
2015-08-14 00:25:39
746
原创 Java并发编程实战笔记(一):线程安全性
线程也被称为轻量级进程。由于同一个进程中的所有线程都将共享进程的内存地址空间,因此这些线程都能访问相同的变量并在同一个堆上分配对象,这就需要实现一种比在进程间共享数据粒度更细的数据共享机制。当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变量的访问。Java中的主要同步机制是关键字synchronized,它提供了一种独占加锁方式,但“同步”这个术语还包
2015-08-13 00:22:20
545
原创 快速排序算法
快速排序是一种排序算法,对包含n个数的输入数组,最坏情况运行时间为Θ(n2)。虽然这个最坏情况运行时间比较差,但快速排序通常是用于排序的最佳实用选择,这是因为其平均性能相当好,期望的运行时间为Θ(nlgn),且其还能实现就地排序,不需要额外的存储空间。快速排序的思想是:将数组A[p..r]划分成两个(可能空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于
2015-08-11 21:02:49
383
原创 堆排序算法
堆排序算法是最经典的排序算法之一,堆排序引入了一种算法设计技术:利用堆数据结构来管理算法执行中的信息。堆数据结构不只是在堆排序中有用,还可以构成一个有效的优先队列。堆数据结构是一种数组对象,它可以被视为一颗完全二叉树。树中每个结点与数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层可能除外,如下图。 树的根为A[i],给定某个结点的下标i,其父结点:PARENT(i)
2015-08-11 12:13:52
424
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人