Use ThreadLocalRandom in IPv4.generateId() 47/91847/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Aug 2020 11:19:08 +0000 (13:19 +0200)
committerHema Gopalakrishnan <hema.gopalkrishnan@ericsson.com>
Wed, 12 Aug 2020 18:37:40 +0000 (18:37 +0000)
Initializing Random instance is very heavy compared to getting
getting a pseudorandom number. Use thread-local instances, which
perform much better.

Change-Id: Id998974dab7ccdb70bc8013ce42803f0e6b59757
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/packet/IPv4.java

index 60575afa46438c278a1fd277cd0d0bc0a6b10745..5960e68e2d3d5ec56a6195e4c4fcf9c7f6958ac0 100644 (file)
@@ -11,7 +11,7 @@ import java.net.InetAddress;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.openflowplugin.libraries.liblldp.BitBufferHelper;
@@ -58,7 +58,7 @@ public class IPv4 extends Packet {
 
     @SuppressWarnings("serial")
     private static final Map<String, Pair<Integer, Integer>> FIELD_COORDINATES
-        = new LinkedHashMap<String, Pair<Integer, Integer>>() { {
+        = new LinkedHashMap<>() { {
                 put(VERSION, new ImmutablePair<>(0, 4));
                 put(HEADERLENGTH, new ImmutablePair<>(4, 4));
                 put(DIFFSERV, new ImmutablePair<>(8, 6));
@@ -431,13 +431,11 @@ public class IPv4 extends Packet {
     }
 
     /**
-     * Generate a random number to set the Identification field
-     * in IPv4 Header.
+     * Generate a random number to set the Identification field in IPv4 Header.
      * @return short
      */
     private static short generateId() {
-        Random randomgen = new Random();
-        return (short) randomgen.nextInt(Short.MAX_VALUE + 1);
+        return (short) ThreadLocalRandom.current().nextInt(Short.MAX_VALUE + 1);
     }
 
     /**