免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1098 | 回复: 0
打印 上一主题 下一主题

java 开发要点备忘 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-06 09:11 |只看该作者 |倒序浏览

                最后更新:2008-07-06,by ArLi
  • 基本数值类型的计算不是原子操作。
    这是一个很重要的概念。。
    当很多个线程同时对一个比如int型进行加减计算时,并不能保证都是意愿的结果。换句话说,如 int i=1000, 当1000个线程执行 i-- 时,并不全部都是 i=i-1,通常在多核CPU执行这些线程时,有可能其中一条线程的i 是另一条线程 -- 之前的结果。
    这种情况通常很少遇到,但在高负载应用中,它是绝对不能无视的原则性问题。
    正确的作法应该是在 i-- 之前加一个同步锁(比如 synchronized),这听起来不太妙。。那就试试jdk 1.5的java.util.concurrent.atomic.AtomicInteger,但千万不能侥幸心理,发生问题时找起来可就费事了。。
  • 所有参数都是传址的。
    java所有参数都是传址的,其原则是,方法内部无法变更这个址(指针),也就是无视指针变更。
    比如:int 型参数,在方法结束时传递过去和原来的变量,可能不再是同一个地址,因为当方法内修改了int 的值之后,导致指针指向了栈上的另一个位置。同理,String 也是这样,因为它是不可修改型的,当方法内容对其值进行修改时,也发生了同int型一样的情况。
    当传递的是一个对象时,对其成员的修改都不会触犯那个原则,而对这个对象进行new(指针指向一个新对象)或重新赋值(指针指向另一个对象)时,就触犯了那个原则,导致调用前跟调用后对象并未发生改变的“误解”。
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27936/showart_1074058.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP