Practical Java
文章平均质量分 61
dengyin2000
这个作者很懒,什么都没留下…
展开
-
不要对locked object(上锁对象)的object reference 重新赋值
“不要对locked object(上锁对象)的object reference 重新赋值”怎么理解这句话呢?假如我locked object正是我需要修改的对象呢?这里所说的并不是不可以修改object, 而是不能修改这个object的reference,因为一旦修改reference改变了,这个对象的存放地址就改变了,其实就变成了另外一个对象了只是引用的变量名不同而已,所以原来获得的锁在同一时原创 2005-06-09 11:39:00 · 1204 阅读 · 0 评论 -
谨慎地定义和实现immutable classes(不可变类)
immutable object提供了极具价值的服务。由于他们保证自己的状态从构建之后就一定不再改变。因此他们天生具备多线程安全性。所以我们可以不必对它进行同步控制,这样可能能够提高些性能。但是实现immutable object时你必须实现clone(克隆)功能,而其代价可能不小。要将一个类变成immutable是要通过多方面的合作才可能造就不变性。1、将class中的所有数据声明为privat原创 2005-06-14 10:26:00 · 1437 阅读 · 0 评论 -
Synchronized含义
Synchronized 锁定的是对象而非函数或代码。每个Object都有一把锁(Lock),当进行到Synchronized语句或函数的时候,这把锁就会被当前的线程(thread)拿走,其他的(thread)再去访问的时候拿不到锁就被暂停了。只有当Synchronized的是同一个对象的才是线程安全的(thread-safe)class Test{ public Synchronize原创 2005-06-08 11:11:00 · 1941 阅读 · 0 评论 -
不要调用 stop()或suspend()方法。
在java doc里面可以看到stop suspend 已经被deprecated了。因为stop会造成unsafe,而suspend会造成死锁。那我们要怎么让一个线程stop。我们需要提供一个变量,以及一个用来设置这个变量的函数。如:class Test extends Thread{ private boolean stop; public void stopThread(){原创 2005-06-09 12:13:00 · 1307 阅读 · 0 评论 -
避免interfaces中的函数发生冲突。
interface Golfer{ public static final int HighScore = 90; public static final int LowScore = 72; public int computeScore();}interface Bowler{ public static final int HighScore = 300; pub原创 2005-06-13 12:19:00 · 1181 阅读 · 0 评论 -
使用继承或委托来定义immutable classes
1、Immutable interface(不可变接口)假设你有一个表示圆圈的mutable class MutableCirle, 你想把它变成immutable object。class MutableCircle{ private double radius; public MutableCircle(double r){ radius = r; } publi原创 2005-06-15 10:03:00 · 1229 阅读 · 2 评论 -
参数以by value方式而非by reference方式传递
一个普遍存在的误解是:java中的参数是以by reference方式传递,这不是真的,参数是以by value的方式传递的,可能这个都是跟“所有java object都是object references”。事实上参数传递是对象的reference的附件打交道,而不是对象的附件。如果你不同意改变在传递的函数内部改变被传入对象的值,有两种方法。1、传递这个对象的克隆件(clone)。2、使传入的这原创 2005-06-16 10:17:00 · 1075 阅读 · 0 评论 -
对不变的data和object references 使用final(注意这里指的是references而不是对象)
许多语言都提供常量数据用来表示那些既不会改变也不能被改变的数据。java关键词final用来表示常量数据,如:public static final int HEIGHT = 200;假如你在以后的代码对 HEIGHT进行修改的话就无法通过编译。如:HEIGHT = 120;假如我们想定义一个常量对象,又该如何呢?class Circle{ private double rad; publ原创 2005-06-17 11:16:00 · 1320 阅读 · 3 评论