Fix timing in SynchronizingCorrelatorTest
diff --git a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SynchronizingCorrelatorTest.java b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SynchronizingCorrelatorTest.java
index 9923fe1..28020b6 100644
--- a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SynchronizingCorrelatorTest.java
+++ b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/util/tests/SynchronizingCorrelatorTest.java
@@ -13,6 +13,8 @@
 import org.eclipse.net4j.util.concurrent.ISynchronizer;
 import org.eclipse.net4j.util.concurrent.SynchronizingCorrelator;
 
+import java.util.concurrent.CountDownLatch;
+
 /**
  * @author Eike Stepper
  */
@@ -20,30 +22,34 @@
 {
   public void testPutConsumerFirst() throws Exception
   {
-    final Boolean[] result = { false };
     final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
+    final CountDownLatch correlationEstablished = new CountDownLatch(1);
+    final Boolean[] result = { false };
+
     final Thread consumer = new Thread()
     {
       @Override
       public void run()
       {
         ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
+        correlationEstablished.countDown();
+
         result[0] = eike.get(5000);
         msg("RESULT: " + result[0]); //$NON-NLS-1$
       }
     };
 
     consumer.start();
-    sleep(100);
+    await(correlationEstablished);
 
     correlator.put("eike", true, DEFAULT_TIMEOUT); //$NON-NLS-1$
     consumer.join(DEFAULT_TIMEOUT);
     assertEquals(Boolean.TRUE, result[0]);
   }
 
-  public void testPutConsumerFirst10() throws Exception
+  public void testPutConsumerFirst1000() throws Exception
   {
-    for (int i = 0; i < 10; i++)
+    for (int i = 0; i < 1000; i++)
     {
       testPutConsumerFirst();
     }
@@ -51,21 +57,25 @@
 
   public void testBlockingPutConsumerFirst() throws Exception
   {
-    final Boolean[] result = { false };
     final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
+    final CountDownLatch correlationEstablished = new CountDownLatch(1);
+    final Boolean[] result = { false };
+
     final Thread consumer = new Thread()
     {
       @Override
       public void run()
       {
         ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
+        correlationEstablished.countDown();
+
         result[0] = eike.get(5000);
         msg("RESULT: " + result[0]); //$NON-NLS-1$
       }
     };
 
     consumer.start();
-    Thread.sleep(10);
+    await(correlationEstablished);
 
     boolean consumed = correlator.put("eike", true, 1000); //$NON-NLS-1$
     msg("Consumed: " + consumed); //$NON-NLS-1$
@@ -75,9 +85,9 @@
     assertEquals(Boolean.TRUE, result[0]);
   }
 
-  public void testBlockingPutConsumerFirst10() throws Exception
+  public void testBlockingPutConsumerFirst1000() throws Exception
   {
-    for (int i = 0; i < 10; i++)
+    for (int i = 0; i < 1000; i++)
     {
       testBlockingPutConsumerFirst();
     }
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/SynchronizingCorrelator.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/SynchronizingCorrelator.java
index 599d9d6..bc1d444 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/SynchronizingCorrelator.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/SynchronizingCorrelator.java
@@ -18,7 +18,7 @@
  */
 public class SynchronizingCorrelator<CORRELATION, RESULT> implements ICorrelator<CORRELATION, ISynchronizer<RESULT>>
 {
-  private ConcurrentMap<CORRELATION, ISynchronizer<RESULT>> map = new ConcurrentHashMap<CORRELATION, ISynchronizer<RESULT>>(0);
+  private final ConcurrentMap<CORRELATION, ISynchronizer<RESULT>> map = new ConcurrentHashMap<CORRELATION, ISynchronizer<RESULT>>(0);
 
   /**
    * @since 3.0