诗剑书生的专栏

我在灌江口上住,花开花落,不知流年度.雁过空遗秋色暮,抚琴细听梧桐雨. 轻舞残虹漫展书,云卷云舒,思愫万千缕.安得婵娟与共处,长作识字耕田夫.                   诗剑书生 于灌江口.听潮居

诗剑书生ID:axman
104820次访问,排名829好友0人,关注者7
一个男人. 一个写程序男人. 一个写程序并从程序中寻找快乐的男人. 一个写程序并从程序中寻找快乐又把快乐传递给大家的男人.
一个书生. 一个寂寞的书生. 一个寂寞的梅香竹影下敲声写韵的书生. 一个寂寞的梅香竹影下敲声写韵晨钟暮鼓中逸气扬剑的书生.
那个男人是位书生。没有人知道他的姓名,居无定所,行无定踪,亦耕亦读,或渔或樵。
axman的文章
原创 87 篇
翻译 0 篇
转载 0 篇
评论 162 篇
axman的公告
最近评论
axman:不用说明什么,一切都如我预料的那样.
在整个奥运开幕式期间,我一边看电视,一边访问
http://www.cctvolympics.com/main.php?type=vod这个地址,其间访问一百多次,没有一次成功.大多数时候是前端缓存的squid在报refuse(111).有时以过几分钟的等待,能出来页面,但Flash缓冲的进度条到了99%就一直停止在那儿.
……
myvicc:写得不错,等写下文
chinagavin:我是先读三位正向输出,然后再读三位反向输出来最终达到想要的结果。
chinagavin:更新啊,好久没更新了。
YuLimin:快更新呀。。。等着呢:)呵呵。。。
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 多线程编程的设计模式 不变模式(一)收藏

    新一篇: 多线程编程的设计模式 不变模式(二) | 旧一篇: symbian的清除栈

     

    多线程编程的设计模式 不变模式(一)
    虽然这个模式的名称已经有人介绍过,但我仍然要以我的方式来介绍它,因为我对这个模式要说的
    东西比现有的我所能看到的介绍更全面更深入.
     
    一.不变模式需要的基础.
    模式虽然显得高深,但学习它的难度很低,即使你只是一个中级水平的程度员,也可以在很短的时候
    学会一个模式(当然要能正确地运用那需要丰富的经验积累).对于基础知识的深入才是一个优秀的
    程序员所具备有必要条件.
     
    我下面要说的话不是说国内没有基础深厚的java技术人员,而是说没有基础深厚却又能说清楚让别
    人也深厚起来的人.简单说高手随处可见,但可以做师父的高手我没有见到.那么就让我这个不是高
    手的人来补一堂Java最最基础的知识吧.
     
    基础类型和引用类型的内存布局:
    int x = 1;
    int y = x;
    x ++;
    System.out.println(y);
    有99.99%的Java程序员都知道y为1.当把类型为int的变量x作为类型为y的变量的值时,堆栈中会产生一个与x同样大小的值,但无法改变它们是两个不同的副本事实.它们互不相关,仅仅是在”创建” y的依据,完成后它们之间没有任何关系,既然没有任何关系,当然修改其中一个就不会影响另一个.这时它们有内存布局为:
          
    为了简化说明引用类型我们用Integer来作为例子.它的值作为它最重要的属性被表示出来:
     
    Integer x  =  new Integer(100);
    Integer y  =  x;
    这时正确的表述为产生了两个指向同一对象的变量(或引用).只要看它们的内存而局就知道它们的意义了:
     
     
    对于引用类型,改变引用本身并不影响其它指向同一对象的引用,改变引用本身就是把引用指点向另一个对象,简单说就是重新赋值.假如 x = new Integer(101);那么它并不影响y指向原来的100.
    但改变对象的内容则同时影响其它指向同一引用的变量,因为Integer被设计为不变模式,所以我们目前不能修改它的内容,也就是不能个性100为101.下面的内容中会介绍修改对象内容.
    对于引用参数传递,方法外的引用和方法内的引用虽然变量名在语法相同,但实际变量本身因为作用范围原因是不
    同的,但它们都指向同一对象.
    StringBuffer sb = new StringBuffer("xxxx");
    amethod(sb){
      
    }
    这是发生的内存而局如下:
     
    在没有以不变模式来介绍String的时候,我们先来看String类的其它几个属性,其实String类要说的东西太多,这里只说几个必要的知识:
           String s1 = “1111”;
    String s2 = “1111”;
    String 是唯一可以直接赋常量值的类(这只是对于程序员而言,也就从语法而言),对于这样的字面值赋值,其底层就是调用String s1 = new String(“1111”). .intern();
    即先在字符串缓存池中查找是否有字符常量”1111”,如果有测将s1指向这个对象.没有则先创建对象放入字符串缓存池,然后将s1指向它,并销毁堆中的对象,当String s2 = “1111”;时仍然是调用
    String s2 = new String(“1111”). .intern();这时已经找到字符常量”1111”,所以s2也指向了字符串缓存池中那个对象,并销毁了堆中的”1111”,这样做的结果就是直接赋字面值的语句如果字面值相同它们就都指向同一对象.
     
    因为字符串类是不变模式最典型的代表,所以其它的知识将在下面继续介绍.

    发表于 @ 2006年09月29日 10:14:00|评论(loading...)|编辑

    新一篇: 多线程编程的设计模式 不变模式(二) | 旧一篇: symbian的清除栈

    评论

    #坎井之蛙 发表于2006-10-24 11:47:00  IP: 61.139.69.*
    非常好的系列文章,学习敬仰中。。。,期待更多的好文章!
    #gavin46 发表于2006-10-24 23:45:00  IP: 61.232.10.*
    终于把Java的文章看完了。受益匪浅。
    读完这篇才知道为什么参数传Integer无法传回一个改变之后的值。
    #HaoZhu 发表于2006-11-24 13:38:00  IP: 211.94.143.*
    写得非常清楚简练,又温习了一遍thread。
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © axman