Fix Sonar complaints about synchronization

Change-Id: I1febbe24b9c96083c661a9b1e88b3e0a3bf03752
diff --git a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
index b2e921f..6d92ce6 100644
--- a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
+++ b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
@@ -43,6 +43,7 @@
     private static SharedExecutorService poolThreadExecutor;
 
     private static SharedTimer sharedTimer;
+    private static final Object SHARED_TIMER_LOCK = new Object();
 
     // Ban public construction
     private SharedExecutors() {
@@ -106,28 +107,32 @@
      * called only by the framework.
      */
     public static void shutdown() {
-        sharedTimer.shutdown();
-        singleThreadExecutor.backingExecutor().shutdown();
-        poolThreadExecutor.backingExecutor().shutdown();
-        sharedTimer = null;
-        singleThreadExecutor = null;
-        poolThreadExecutor = null;
+        synchronized (SHARED_TIMER_LOCK) {
+            sharedTimer.shutdown();
+            singleThreadExecutor.backingExecutor().shutdown();
+            poolThreadExecutor.backingExecutor().shutdown();
+            sharedTimer = null;
+            singleThreadExecutor = null;
+            poolThreadExecutor = null;
+        }
     }
 
-    private static synchronized void setup() {
-        if (sharedTimer == null) {
-            sharedTimer = new SharedTimer();
+    private static void setup() {
+        synchronized (SHARED_TIMER_LOCK) {
+            if (sharedTimer == null) {
+                sharedTimer = new SharedTimer();
 
-            singleThreadExecutor =
-                new SharedExecutorService(
-                    newSingleThreadExecutor(groupedThreads("onos/shared",
-                        "onos-single-executor")));
+                singleThreadExecutor =
+                    new SharedExecutorService(
+                        newSingleThreadExecutor(groupedThreads("onos/shared",
+                            "onos-single-executor")));
 
-            poolThreadExecutor =
-                new SharedExecutorService(
-                    newFixedThreadPool(DEFAULT_POOL_SIZE,
-                        groupedThreads("onos/shared",
-                            "onos-pool-executor-%d")));
+                poolThreadExecutor =
+                    new SharedExecutorService(
+                        newFixedThreadPool(DEFAULT_POOL_SIZE,
+                            groupedThreads("onos/shared",
+                                "onos-pool-executor-%d")));
+            }
         }
     }