2017-06-23 15 views
1

私は、0から始まるユニークな自動インクリメントIDを生成する必要があります。 私は2つのフィールドを持っています。 1つは接頭辞で、もう1つは数字です。 各レコードを保存している間に番号を自動的に増やし、接頭辞と連結して保存します。 接頭辞#test- 番号#0 を保存する前に、(test-0)のように2つの値を連結します。いずれかの人がこれを手伝ってくれます。 同期化をサポートする自動インクリメント番号

答えて

3

は、Java 7でリリースされたのAtomicIntegerまたはAtomicLongクラスを使用することができます。

ドキュメント:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html

例: http://tutorials.jenkov.com/java-util-concurrent/atomicinteger.html

のAtomicIntegerクラスがどのできるint型の変数を提供しますが原子的に読み書きされ、compareAndSet()のような高度なアトミック操作も含まれています。 AtomicIntegerクラスは、java.util.concurrent.atomicパッケージにあります。

AtomicIntegerの最も一般的な用途は、異なるスレッドによって同時にアクセスされるカウンタを処理することです。java.util.concurrent。 Atomicパッケージは、単一変数に対するロックフリーおよびスレッドセーフプログラミングをサポートする非常に有用なクラスを提供します。あなたが0(デフォルト)で初期化することができます0を渡すことで

private static AtomicInteger at = new AtomicInteger(0); 

。その後、接頭辞(静的変数)を連結して連結することができます。例:

test+at.getAndIncrement(); // getAndIncrement() - Atomically increments by one the current value. 

これが役立ちます。

+0

ありがとうShivang。 –

+0

@mounishようこそ) –

+0

Atomiclongは同時ユーザーをサポートしていますか? –

3

Igniteは、prefix.IgniteシーケンスIDジェネレータを使用したオープンソースサポートシーケンスジェネレータです。 Link

または サーバーの再起動、メモリ内の値は、ゼロから始めるべきではない場合のでvalue.Youは永続のいくつかの種類を必要とするようにあなたの接頭辞とのAtomicIntegerとしてキーとのConcurrentHashMapを作成することができます。

+0

どのバージョンのIgniteがシーケンス生成をサポートしていますか?このフレームワークの他の最も価値のある機能は何ですか? –

+0

私たちは私たちのプロジェクトで最新のバージョンを使用しています。初期バージョンからのIdジェネレータのサポートを考えています.Hazelcastと同様に、Queue、set、AtomicType(Ie AatomicLong)、分散ロックなどのほとんどの分散データ構造をサポートしています。 –

関連する問題