[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/ )