`
文章列表
  接上一篇:  http://caoyaojun1988-163-com.iteye.com/blog/1302936   5 性能 虽然除了互斥锁,同步框架也支持其他许多风格的同步;但是锁的性能是最容易比较和衡量的,即便如此,还有很多不同的测量方法。这里的实验旨在揭示开销和吞吐量。在每项测试中,每个线程多次更新一个伪随机数,计算使用函数:nextRandom(INT种子):   int t = (seed % 127773) * 16807 –(seed / 127773) * 2836; return (t > 0)? t : t + 0x7fffffff;   ...
  接上一篇:  http://caoyaojun1988-163-com.iteye.com/blog/1290759   4、运用: AbstractQueuedSynchronizer类将上述功能联系在一起,作为一个“模板方法模式[6]”中的模板类,作为其他同步器的基类。子类只是实现预定义方法,实现通过获取锁和释放锁的操作来检查和更新状态。然而,AbstractQueuedSynchronizer的子类本身不可用于ADTS,因为这些类暴露的用于内部控制获取和释放的策略的方法,应该对用户不可见。所有java.util.concurrent包中的同步类声明了一个私有的内部Abst ...
  接上一篇:http://caoyaojun1988-163-com.iteye.com/admin/blogs/1279097   3.3 队列      框架的核心是维护阻塞线程的队列,队列的策略是先进先出(FIFO),因此,该框架不支持基于优先级的同步       一直以来,对于同步队列的最合 ...
最近在使用memcache客户端的时候,发现一个可能是多线程的问题,客户端的实现是NIO+JUC,由于出现频率很低,场景没有办法复原,一直没有找到问题的真正原因,通过代码走查也没有发现任何问题,于是决定回顾一下JUC的东西,看看是不是可以受到启发,于是决定先看一下大牛Doug Lea的论文,顺便翻译一下。由于英文水平很挫,又是第一次,希望不要误导了大家。废话不表。    JAVA.util.concurrent 同步框架   Doug Lea SUNY Oswego  Oswego NY 13126  dl@cs.oswego.edu   摘要      J2SE1.5的jav ...
在上一篇中有提到spring aop的动态字节码增强,我自己也没看过spring 的实现方式,按照大家的说法应该是动态生产一个子类去重写方法,由于自己没去看过,暂且不表,接下去,可能还是打算从分析字节码的角度去看类似于spring aop这个功能反应到字节码有哪些变化,或者说实现方式, 这个例子还是基于最简单的HelloWorld,还请大家回顾一下前面的几个章节,最要是这个 HelloWorld.class 文件的解读 这个例子和前面两个例子一下将基于它做一些变化,再去从字节码的角度去比较看看究竟做了什么。   首先考虑aop的一个最简单应用场景,就是日志输出,假设现在需要在输出hell ...
前面两个例子,一个简单的替换了二进制的编码,一个通过理解class的文件格式,可以增加输出的内容,都非常简单,但是实际可能用到的不会这么简单,更多的是对方法的操作,比如spring aop的实现方式有两种动态代理和字节码增强,其中字节码增强便可以通过修改class的二进制文件完成,另外对性能分析、调试跟踪和日志记录,也可以通过这种方式简单的实现,当然在现实中我们不会去真正的操作二进制码,我们一般通过第三方的库文件,比如:asm、 cglib、 serp、 和bcel等;但是他们的本质还是去操作二进制码;前面在分析helloworld.class 的时候,还剩下两块内容当时没有讨论(其实是一样的 ...
  上一节我们看了一个简单的例子,我们通过直接改变二进制的class文件,改变程序的行为, 这一节继续上面的例子看一些其他的情况,用前面的HelloWorld为例  先看java 文件:     public class HelloWorld{ public static void main(String [] arvgs){ System.out.println("hello world"); } }     它的class文件     00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 0 ...
上一节我们分析了一个简单的HelloWorld的class文件,那知道了这个结构有什么用呢,接下来我们通过几个例子来简单的了解一下。 一、先看一个简单的例子,这个例子了,我们通过直接改变二进制的class文件,改变程序的行为,以前面的HelloWorld为例。 先看java 文件:     public class HelloWorld{ public static void main(String [] arvgs){ System.out.println("hello world"); } }   它的class文件:     000 ...
这一篇主要针对最简单的HelloWorld的class文件进行分析,按照上一篇文章的结构去实例化的分析一个class文件。 下面是java源文件     public class HelloWorld{ public static void main(String [] arvgs){ System.out.println("hello world"); } }    运行 javac HelloWorld.java 得到的class 文件如下:   00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 ...
    Java class 文件 1、Class文件是什么:class文件是java程序二进制文件的精确的定义,每一个class的文件都对应一个类或则接口,class文件是JVM真正能读懂的文件格式。 2、Class文件与java的关系:一般的讲class文件由java的类文件编译而来,但是事实上class文件只是定义的一种格式,你甚至可以手动编写二进制文件,只要能满足
提到 string、stringbuilder、 stringbuffer、大家都应该非常熟悉, 通常的理解是: string 对象为final的,一旦被创建,就不能改变。 stringbuffer 是可变对象,append(),不会新建对象,同时是线程安全的, stringbuilder 为线程不安全。 有 ...
 最近看了一些spring 源码的分析的文章,自己也仔细看了一部分源码,终觉得由于涉及到的类之间的关系过于复杂,看过之后收获也不是很大,我想可不可以通过一步一步建立一个简单类spring 的方式来分析源码呢?类似于《how tomcat works》。不知道大家对这个计划有什么看法呢?欢迎大家发表自己的意见。。
在上一节第一个函数里,有两个比较重要的函数调用,第一个在上一节已经分析过了,这个函数将我们定义在xml文件里的bean的信息,封装到一个 BeanDefinitionHolder类型的对象里。这一节将继续处理这个对象。   2.1.1.1.2 registerBeanDefinition (bdHolder, getReaderContext().getRegistry())   在 BeanDefinitionReaderUtils 调用: ================================================================= ...
 上一节将xml文档解析为DOM ,并且创建了一个 BeanDefinitionParserDelegate 类型的对象,在这一节,将使用这个对象来完成对bean的装载工作。   2.1.1.1 parseBeanDefinitions (root, delegate): 该方法体完成注册过程。   ====================================================================     /**       * Process the given bean element, parsing the bean ...
Global site tag (gtag.js) - Google Analytics