การใช้งานปัจจุบันของSecureRandomเธรดปลอดภัยโดยเฉพาะสองวิธีการกลายพันธุ์nextBytes(bytes[])และsetSeed(byte[])มีการซิงโครไนซ์
เท่าที่ฉันสามารถบอกได้ในที่สุดวิธีการกลายพันธุ์ทั้งหมดจะถูกกำหนดเส้นทางผ่านสองวิธีนี้และSecureRandomแทนที่วิธีการบางอย่างRandomเพื่อให้แน่ใจว่า ซึ่งใช้งานได้ แต่อาจเปราะบางหากมีการเปลี่ยนแปลงการนำไปใช้ในอนาคต
ทางออกที่ดีที่สุดคือการซิงโครไนSecureRandomซ์อินสแตนซ์ด้วยตนเองก่อน ซึ่งหมายความว่าสแต็กการโทรแต่ละชุดจะได้รับการล็อกสองรายการในวัตถุเดียวกัน แต่โดยปกติจะมีราคาถูกมากสำหรับ JVM สมัยใหม่ นั่นคือไม่มีอันตรายมากนักในการซิงโครไนซ์ตัวเองอย่างชัดเจน ตัวอย่างเช่น:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}