1 package com.romix.scala.collection.concurrent;
\r
3 import java.util.Map;
\r
4 import java.util.concurrent.ExecutorService;
\r
5 import java.util.concurrent.Executors;
\r
6 import java.util.concurrent.TimeUnit;
\r
8 import org.junit.Test;
\r
10 public class TestMultiThreadAddDelete {
\r
11 private static final int RETRIES = 1;
\r
12 private static final int N_THREADS = 7;
\r
13 private static final int COUNT = 50 * 1000;
\r
16 public void testMultiThreadAddDelete () {
\r
17 for (int j = 0; j < RETRIES; j++) {
\r
18 final Map<Object, Object> bt = new TrieMap <Object, Object> ();
\r
21 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);
\r
22 for (int i = 0; i < N_THREADS; i++) {
\r
23 final int threadNo = i;
\r
24 es.execute (new Runnable () {
\r
26 public void run () {
\r
27 for (int j = 0; j < COUNT; j++) {
\r
28 if (j % N_THREADS == threadNo) {
\r
29 bt.put (Integer.valueOf (j), Integer.valueOf (j));
\r
37 es.awaitTermination (3600L, TimeUnit.SECONDS);
\r
38 } catch (final InterruptedException e) {
\r
39 e.printStackTrace ();
\r
43 TestHelper.assertEquals (COUNT, bt.size ());
\r
44 TestHelper.assertFalse (bt.isEmpty ());
\r
47 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);
\r
48 for (int i = 0; i < N_THREADS; i++) {
\r
49 final int threadNo = i;
\r
50 es.execute (new Runnable () {
\r
52 public void run () {
\r
53 for (int j = 0; j < COUNT; j++) {
\r
54 if (j % N_THREADS == threadNo) {
\r
55 bt.remove (Integer.valueOf (j));
\r
63 es.awaitTermination (3600L, TimeUnit.SECONDS);
\r
64 } catch (final InterruptedException e) {
\r
65 e.printStackTrace ();
\r
70 TestHelper.assertEquals (0, bt.size ());
\r
71 TestHelper.assertTrue (bt.isEmpty ());
\r
74 final ExecutorService es = Executors.newFixedThreadPool (N_THREADS);
\r
75 for (int i = 0; i < N_THREADS; i++) {
\r
76 final int threadNo = i;
\r
77 es.execute (new Runnable () {
\r
79 public void run () {
\r
80 for (int j = 0; j < COUNT; j++) {
\r
81 if (j % N_THREADS == threadNo) {
\r
83 bt.put (Integer.valueOf (j), Integer.valueOf (j));
\r
84 if (!bt.containsKey (Integer.valueOf (j))) {
\r
85 System.out.println (j);
\r
87 bt.remove (Integer.valueOf (j));
\r
88 if (bt.containsKey (Integer.valueOf (j))) {
\r
89 System.out.println (-j);
\r
91 } catch (Throwable t) {
\r
92 t.printStackTrace ();
\r
101 es.awaitTermination (3600L, TimeUnit.SECONDS);
\r
102 } catch (final InterruptedException e) {
\r
103 e.printStackTrace ();
\r
107 TestHelper.assertEquals (0, bt.size ());
\r
108 if (!bt.isEmpty ()) {
\r
109 System.out.println ();
\r
111 TestHelper.assertTrue (bt.isEmpty ());
\r