を出すにはどうしたらいいんですユニークIDでJava(整数)?
-
24-09-2019 - |
質問
を出すにはどうしたらいいんです独自のIDを整数値をjavaという次かかりますか?
解決
どのようなトいたします。
まだ内でユニークなプロセス、その後でご利用いただけます。 AtomicInteger
電話 incrementAndGet()
各時間が必要である。
他のヒント
int uniqueId = 0;
int getUniqueId()
{
return uniqueId++;
}
あなたはそれがスレッドセーフになりたい場合はsynchronized
を追加します。
あなたが多少制約されている場合、それは簡単です。
あなたは一つのスレッドを持っている場合は、は、あなただけのユニークID ++を使用します。ときに終了し、現在のユニークIDを保存するようにしてくださいます。
あなたが複数のスレッドを持っている場合は、は、共通同期generateUniqueID方法の作品は(上記と同じ実装)。
あなたは、多くのCPUを持っているときに問題がある - 。クラスタ内またはピア・ツー・ピアのゲームのようないくつかの分散設定のいずれか
その場合、あなたは一般的に、単一の番号を形成するために、2つの部品を組み合わせることができます。例えば、ユニークなIDを生成し、各プロセスは、それ自身の2バイトのID番号が割り当てられていることができ、その後、ユニークID ++とそれを組み合わせます。ような何かます:
return (myID << 16) & uniqueID++
それは「MYID」の部分を配布するトリッキーなことができますが、いくつかの方法があります。あなただけの集中管理サーバからユニークIDを要求し、一元化されたデータベースの1をつかむことができ、...
あなたはintの代わりにロングを持っていた場合、一般的なトリックの一つは、サーバに一意であることが保証のデバイスID ETH0の(UUID)を、取ることです - そしてちょうどシリアル番号を追加します。 P>
あなたが本当にint型ではなく整数を意味している場合:
Integer id = new Integer(42); // will not == any other Integer
あなたが他のプロセスまたはユーザー、永続的な、または他の考慮事項のホストに何か目に見える外のJVMをしたい場合は、、その後、他のアプローチがありますが、コンテキストなしで、あなたはビルトインの一意性を使用して使用したほうが良いでしょうですお使いのシステム内のオブジェクトのアイデンティティます。
ジャストIDを生成し、それが生成されたIDのリストに既に存在しているかどうかを確認します。
だけのつもりです;
- 独自の間JVMs走行 も同時に行います。
- 独自の場合においても、JVM はます。
- スレッドセーフです。
- 支援null?ない場合には、利用のintです。
import java.util.UUID;
public class IdGenerator {
public static int generateUniqueId() {
UUID idOne = UUID.randomUUID();
String str=""+idOne;
int uid=str.hashCode();
String filterStr=""+uid;
str=filterStr.replaceAll("-", "");
return Integer.parseInt(str);
}
// XXX: replace with java.util.UUID
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(generateUniqueId());
//generateUniqueId();
}
}
}
希望これはあなたを助けます。
いつでもユニークます:
int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);