[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 11496] Re: 4/17 勉強会議事録 (UUID under JDK1.5)
高橋(智)です。
そうとう昔の議事録ですが、JDK1.5を見ていて気になった事が
有りましたので書きました。(^^;
nemo_kaz wrote:
> ■主キーの生成方法
snip
> ■UUID for EJB
>
> java.rmi.server.UID
> UUIDもGUIDを128bit
snip
EJBデザインパターンの本の時に話題にしたUUIDですが、JDK1.5の
java.util.UUID というクラスが新設されたようです。
もっとも一般的な使い方は
java.util.UUID uuid = java.util.UUID.randomUUID();
String uuid_str = uuid.toString(); // xxxx-xx-xx-xx-xxxxxx
のように思いますが、コンストラクタの実装が以下のようになって
います。
[UUID.javaより抜粋]
-----------------------------------------------------------
...
private static volatile SecureRandom numberGenerator = null;
...
public static UUID randomUUID() {
SecureRandom ng = numberGenerator;
if (ng == null) {
numberGenerator = ng = new SecureRandom();
}
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f; /* clear version */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] &= 0x3f; /* clear variant */
randomBytes[8] |= 0x80; /* set to IETF variant */
UUID result = new UUID(randomBytes);
return new UUID(randomBytes);
}
...
-----------------------------------------------------------
最後から2行目の「UUID result = new UUID(randomBytes);」が
無駄に思えるのですがどうなんでしょうか??
また、マルチスレッド環境下でこの randomUUID staticメソッドを
呼び出すのは特に問題にはならないのでしょうか?
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )