Implementasi saat ini SecureRandomadalah thread safe, khususnya dua metode mutasi nextBytes(bytes[])dan setSeed(byte[])disinkronkan.
Sejauh yang saya tahu, semua metode mutasi pada akhirnya diarahkan melalui kedua metode tersebut, dan SecureRandommenimpa beberapa metode Randomuntuk memastikannya. Yang berfungsi tetapi bisa rapuh jika penerapannya diubah di masa mendatang.
Solusi terbaik adalah menyinkronkan SecureRandominstans secara manual terlebih dahulu. Ini berarti setiap tumpukan panggilan akan memperoleh dua kunci pada objek yang sama, tetapi biasanya sangat murah pada JVM modern. Artinya, tidak banyak salahnya menyinkronkan diri Anda secara eksplisit. Sebagai contoh:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}