1 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 ; 14 import java.util.concurrent.LinkedBlockingQueue ; 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 queue = new LinkedBlockingQueue (100); 21 private final CyclicBarrier barrier; 22 23 public LinkedBlockingQueueTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 24 super(appId, cfg, listenerProvider); 25 barrier = new CyclicBarrier (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 t) { 43 notifyError(t); 44 } 45 } 46 47 private void doGet() throws Exception { 48 while (true) { 49 Object 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 { 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 testClass = LinkedBlockingQueueTestApp.class.getName(); 71 TransparencyClassSpec spec = config.getOrCreateSpec(testClass); 72 73 config.addIncludePattern(testClass + "$*"); 74 75 String 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 |