私はnoncesを生成するために新しいRandom()。nextLong()を呼び出すOAuthライブラリを使用していますが、非同期呼び出しで同じnonceを生成します。私はRandom.nextLong()をスレッシュすることで、同じ正確な数値を頻繁に返すように絞り込んだ。JavaスレッドRandom.nextLong()同じ番号を返す
これはJavaの既知の制限事項は誰にも分かりますか?もしそうなら、誰でもスレッドセーフな操作を知っていますか?
編集:私は、Java 1.6
EDITを使用しています:これは私が私の大きなアプリで何が起こっていたかテストするために作られた小さなプログラムです。私はこれを数回、より頻繁に走らなければならなかった。時間が同じであれば同じ乱数が出てくるはずだった。私のクイックプログラミングを許してください。
public class ThreadedRandom {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ThreadedRandom().run();
}
private RandomNumberGenerator _generator;
public ThreadedRandom()
{
_generator = new RandomNumberGenerator();
}
public void run()
{
Runnable r = new Runnable() {
@Override public void run() {
System.out.println(System.currentTimeMillis()+"\t"+_generator.gen());
}
};
Thread t1, t2;
t1 = new Thread(r);
t2 = new Thread(r);
t1.start();
t2.start();
}
private class RandomNumberGenerator {
Random random;
public RandomNumberGenerator()
{
random = new Random();
}
public Long gen() {
return new Random().nextLong();
}
}
}
コードを投稿することができます –
SecureRandomを参照してください - http://download.oracle.com/javase/7/docs/api/java/security/SecureRandom.html – jjnguy
これは実際には起こりません。特にSystem.nanoTimeとvolatileのseedUniquifierを使用するため、頻繁に発生します。 – maaartinus