Я использую библиотеку OAuth, которая вызывает new Random (). NextLong () для генерации одноразовых номеров, однако она генерирует тот же одноразовый номер при асинхронных вызовах. Я сузил его до многопоточности Random.nextLong (), чтобы время от времени возвращать одно и то же точное число.
Кто-нибудь знает, является ли это известным ограничением Java? Если да, кто-нибудь знает о поточно-безопасной работе?
РЕДАКТИРОВАТЬ: я использую Java 1.6
РЕДАКТИРОВАТЬ: Это небольшая программа, которую я сделал, чтобы проверить, что происходит в моем более крупном приложении. Я запускал это несколько раз и чаще, чем следовало, это было одно и то же случайное число, когда время было одинаковым. Пожалуйста, извините за мое быстрое программирование.
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();
}
}
}