Re: Distinct ID Number Per Object?
On Sun, 17 Jun 2007 00:25:59 +0100, Hal Vaughan <hal@thresholddigital.co=
m> =
wrote:
Twisted wrote:
...
public class Base {
public final long id; // should stay unique even on 64-bit
architectures, or with long running systems
private static long idGenerator;
public Base () {
synchronized (Base.class) {
id = idGenerator;
idGenerator++;
}
}
...
}
There may be nothing to this, but, as I've said in this thread before,=
=
and
said on this group many times, being self taught, I know there are man=
y
things I've missed. Is there any particular reason for you using this=
:
id = idGenerator;
idGenerator++;
Instead of this:
id = idGenerator++;
The first example is less confusing. The single-line variant is modifyi=
ng =
two variables. And if you don't think the second example has the =
potential for confusion, you may be surprised that is not semantically =
equivalent to the first (it does something different).
You might want to write a little program to demonstrate the difference =
between these two assignments.
id = idGenerator++;
id = ++idGenerator;
Anyway, for a simpler version of the same idea implemented in Twisted's =
=
code, just use java.util.concurrent.atomic.AtomicLong. It deals with th=
e =
synchronisation and incrementing for you.
Dan.
-- =
Daniel Dyer
http//www.uncommons.org