KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > LinkedBlockingQueueSingleNodeTestApp


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tctest;
6
7 import com.tc.object.config.ConfigVisitor;
8 import com.tc.object.config.DSOClientConfigHelper;
9 import com.tc.object.config.TransparencyClassSpec;
10 import com.tc.simulator.app.ApplicationConfig;
11 import com.tc.simulator.listener.ListenerProvider;
12 import com.tctest.runner.AbstractTransparentApp;
13
14 import java.util.concurrent.CyclicBarrier JavaDoc;
15 import java.util.concurrent.LinkedBlockingQueue JavaDoc;
16
17 public class LinkedBlockingQueueSingleNodeTestApp extends AbstractTransparentApp {
18   private static final int NUM_OF_PUTS = 1000;
19   private static final int NUM_OF_LOOPS = 1;
20   private static final int NUM_OF_PUTTER = 1;
21   private static final int NUM_OF_GETTER = 1;
22
23   private LinkedBlockingQueue JavaDoc queue = new LinkedBlockingQueue JavaDoc();
24
25   public LinkedBlockingQueueSingleNodeTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
26     super(appId, cfg, listenerProvider);
27   }
28
29   public void run() {
30     try {
31       CyclicBarrier JavaDoc barrier = new CyclicBarrier JavaDoc(NUM_OF_PUTTER+NUM_OF_GETTER+1);
32       for (int i = 0; i < NUM_OF_LOOPS; i++) {
33         Thread JavaDoc[] putters = new Thread JavaDoc[NUM_OF_PUTTER];
34         Thread JavaDoc[] getters = new Thread JavaDoc[NUM_OF_GETTER];
35         for (int j = 0; j < NUM_OF_PUTTER; j++) {
36           putters[j] = new Thread JavaDoc(new Putter(barrier, queue, NUM_OF_GETTER));
37         }
38         for (int j = 0; j < NUM_OF_GETTER; j++) {
39           getters[j] = new Thread JavaDoc(new Getter(barrier, queue));
40         }
41         for (int j = 0; j < NUM_OF_PUTTER; j++) {
42           putters[j].start();
43         }
44         for (int j = 0; j < NUM_OF_GETTER; j++) {
45           getters[j].start();
46         }
47       }
48       barrier.await();
49     } catch (Throwable JavaDoc t) {
50       notifyError(t);
51     }
52   }
53
54   private static class Getter implements Runnable JavaDoc {
55     private LinkedBlockingQueue JavaDoc queue;
56     private CyclicBarrier JavaDoc barrier;
57
58     public Getter(CyclicBarrier JavaDoc barrier, LinkedBlockingQueue JavaDoc queue) {
59       this.barrier = barrier;
60       this.queue = queue;
61     }
62
63     public void run() {
64       try {
65         while (true) {
66           Object JavaDoc o = queue.take();
67           if ("STOP".equals(o)) {
68             break;
69           }
70           WorkItem w = (WorkItem) o;
71           System.out.println("Getting " + w.getI());
72         }
73         barrier.await();
74       } catch (Exception JavaDoc e) {
75         throw new AssertionError JavaDoc(e);
76       }
77     }
78   }
79
80   private static class Putter implements Runnable JavaDoc {
81     private CyclicBarrier JavaDoc barrier;
82     private LinkedBlockingQueue JavaDoc queue;
83     private int numOfGetter;
84
85     public Putter(CyclicBarrier JavaDoc barrier, LinkedBlockingQueue JavaDoc queue, int numOfGetter) {
86       this.barrier = barrier;
87       this.queue = queue;
88       this.numOfGetter = numOfGetter;
89     }
90
91     public void run() {
92       try {
93         for (int i = 0; i < NUM_OF_PUTS; i++) {
94           System.out.println("Putting " + i);
95           queue.put(new WorkItem(i));
96         }
97         for (int i = 0; i < numOfGetter; i++) {
98           queue.put("STOP");
99         }
100         barrier.await();
101       } catch (Exception JavaDoc e) {
102         throw new AssertionError JavaDoc(e);
103       }
104     }
105   }
106
107   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
108     String JavaDoc testClass = LinkedBlockingQueueSingleNodeTestApp.class.getName();
109     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
110
111     config.addIncludePattern(testClass + "$*");
112
113     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
114     config.addWriteAutolock(methodExpression);
115
116     spec.addRoot("queue", "queue");
117   }
118
119   private static class WorkItem {
120     private final int i;
121
122     public WorkItem(int i) {
123       this.i = i;
124     }
125
126     public int getI() {
127       return this.i;
128     }
129   }
130 }
131
Popular Tags