JAVA中取順序號 (轉)

worldblog發表於2008-01-31
JAVA中取順序號 (轉)[@more@]

在寫的時候,經常會遇到用一個唯一的鍵值去票識一個,如中一條記錄的主鍵,的檔名

等。常用的做法將這個鍵值從1,2,3……這樣一值遞加下去,但這樣會比較費時。如在資料庫中的記錄,你要

先找出最大的一個流水號,再進行加1的操作,這樣已是做了一個資料庫的操作,如在檔案系統中,那就

要先讀出所有檔名,對檔名進行排序,那更麻煩了。

下面介紹一個比較簡單快捷的方法,那就是使用系統時鐘。在中,使用System.currentTimeMillis()可以

得到這前系統時間所對應的毫秒數,時間是不會重複的,所以可放心使用。為了滿足併發使用的情況,可以加

入同步。

下面有一段樣例程式碼,可以參考一下:

package comm;

import java.util.Ran;

public class UId {
  private static Random random = new java.util.Random();
  private static final int ID_BYTES = 10;

  public synchronized static String generateId() {
  StringBuffer result = new StringBuffer();
  result = result.append(System.currentTimeMillis());
  for (int i = 0; i < ID_BYTES; i++) {
  result = result.append(random.nextInt(10));
  }
  return result.toString();
  }
}

在上面的程式碼中,在系統的毫秒數後面還加了10位的隨機數,以保證在同一毫秒內的併發取得不同的值。

當然,使用這種方法也有一定的侷限,一是你不能隨意修改時間,二就是鍵值不是按順序的。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章