summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
authorSasa Zivkov2011-01-07 07:38:28 (EST)
committer Sasa Zivkov2011-01-10 03:15:26 (EST)
commitd7ca89204217e61649247512a22196705ae6f433 (patch)
treebc509134b7d9f60d9fddfa15fd44e2e8e2e84441
parentb7f887f1204fc14e2ef698d6d4a24d13fa6de5e6 (diff)
downloadjgit-d7ca89204217e61649247512a22196705ae6f433.zip
jgit-d7ca89204217e61649247512a22196705ae6f433.tar.gz
jgit-d7ca89204217e61649247512a22196705ae6f433.tar.bz2
Using java.util.concurrent in NLSTest instead of handling threads directly.refs/changes/19/2219/2
A test in NLSTest was mixing the "old" and the "new" way of handling concurrency. This change makes use of the java.util.concurrent facilities to control concurrency and removes the code that was directly dealing with Thread objects. Change-Id: Ie7267776e988a48a5443f0f3fe4eb43e79eee4b1 Signed-off-by: Sasa Zivkov <sasa.zivkov@sap.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/NLSTest.java58
1 files changed, 28 insertions, 30 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/NLSTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/NLSTest.java
index 6d81f86..a74ea98 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/NLSTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/nls/NLSTest.java
@@ -44,12 +44,16 @@
package org.eclipse.jgit.nls;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.util.Locale;
-import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.Callable;
import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import org.junit.Test;
@@ -106,43 +110,37 @@ public class NLSTest {
}
@Test
- public void testParallelThreadsWithDifferentLocales() throws InterruptedException {
+ public void testParallelThreadsWithDifferentLocales()
+ throws InterruptedException, ExecutionException {
final CyclicBarrier barrier = new CyclicBarrier(2);
- class T extends Thread {
- Locale locale;
- GermanTranslatedBundle bundle;
- Exception e;
+ class GetBundle implements Callable<TranslationBundle> {
+
+ private Locale locale;
- T(Locale locale) {
+ GetBundle(Locale locale) {
this.locale = locale;
}
- @Override
- public void run() {
- try {
- NLS.setLocale(locale);
- barrier.await(); // wait for the other thread to set its locale
- bundle = GermanTranslatedBundle.get();
- } catch (InterruptedException e) {
- this.e = e;
- } catch (BrokenBarrierException e) {
- this.e = e;
- }
+ public TranslationBundle call() throws Exception {
+ NLS.setLocale(locale);
+ barrier.await(); // wait for the other thread to set its locale
+ return GermanTranslatedBundle.get();
}
}
- T t1 = new T(NLS.ROOT_LOCALE);
- T t2 = new T(Locale.GERMAN);
- t1.start();
- t2.start();
- t1.join();
- t2.join();
-
- assertNull("t1 was interrupted or barrier was broken", t1.e);
- assertNull("t2 was interrupted or barrier was broken", t2.e);
- assertEquals(NLS.ROOT_LOCALE, t1.bundle.effectiveLocale());
- assertEquals(Locale.GERMAN, t2.bundle.effectiveLocale());
+ ExecutorService pool = Executors.newFixedThreadPool(2);
+ try {
+ Future<TranslationBundle> root = pool.submit(new GetBundle(
+ NLS.ROOT_LOCALE));
+ Future<TranslationBundle> german = pool.submit(new GetBundle(
+ Locale.GERMAN));
+ assertEquals(NLS.ROOT_LOCALE, root.get().effectiveLocale());
+ assertEquals(Locale.GERMAN, german.get().effectiveLocale());
+ } finally {
+ pool.shutdown();
+ pool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
+ }
}
}