热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>编程开发>JAVA>

java 开发要点备忘

来源: 作者: 时间:2008-07-07 Tag: 点击:
最后更新: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(指针指向一个新对象)或重新赋值(指针指向另一个对象)时,就触犯了那个原则,导致调用前跟调用后对象并未发生改变的“误解”。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表