KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > LinkedBlockingQueueTestApp


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

4 package com.tctest;
5
6 import com.tc.object.config.ConfigVisitor;
7 import com.tc.object.config.DSOClientConfigHelper;
8 import com.tc.object.config.TransparencyClassSpec;
9 import com.tc.simulator.app.ApplicationConfig;
10 import com.tc.simulator.listener.ListenerProvider;
11 import com.tctest.runner.AbstractTransparentApp;
12
13 import java.util.concurrent.CyclicBarrier JavaDoc;
14 import java.util.concurrent.LinkedBlockingQueue JavaDoc;
15
16 public class LinkedBlockingQueueTestApp extends AbstractTransparentApp {
17   private static final int NUM_OF_PUTS = 1000;
18   private static final int NUM_OF_LOOPS = 5;
19
20   private LinkedBlockingQueue JavaDoc queue = new LinkedBlockingQueue JavaDoc(100);
21   private final CyclicBarrier JavaDoc barrier;
22
23   public LinkedBlockingQueueTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
24     super(appId, cfg, listenerProvider);
25     barrier = new CyclicBarrier JavaDoc(getParticipantCount());
26   }
27
28   public void run() {
29     try {
30       int index = barrier.await();
31
32       for (int i = 0; i < NUM_OF_LOOPS; i++) {
33         if (index == 0) {
34           doPut();
35         } else {
36           doGet();
37         }
38         barrier.await();
39       }
40
41       barrier.await();
42     } catch (Throwable JavaDoc t) {
43       notifyError(t);
44     }
45   }
46
47   private void doGet() throws Exception JavaDoc {
48     while (true) {
49       Object JavaDoc o = queue.take();
50       if ("STOP".equals(o)) {
51         break;
52       }
53       WorkItem w = (WorkItem) o;
54       System.out.println("Getting " + w.getI());
55     }
56   }
57
58   private void doPut() throws Exception JavaDoc {
59     for (int i = 0; i < NUM_OF_PUTS; i++) {
60       System.out.println("Putting " + i);
61       queue.put(new WorkItem(i));
62     }
63     int numOfGet = getParticipantCount() - 1;
64     for (int i = 0; i < numOfGet; i++) {
65       queue.put("STOP");
66     }
67   }
68
69   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
70     String JavaDoc testClass = LinkedBlockingQueueTestApp.class.getName();
71     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
72
73     config.addIncludePattern(testClass + "$*");
74
75     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
76     config.addWriteAutolock(methodExpression);
77
78     spec.addRoot("queue", "queue");
79     spec.addRoot("barrier", "barrier");
80   }
81
82   private static class WorkItem {
83     private final int i;
84
85     public WorkItem(int i) {
86       this.i = i;
87     }
88
89     public int getI() {
90       return this.i;
91     }
92   }
93 }
94
Popular Tags