@Override public void run(String... arg0) throws Exception { dictionary.set("java", "object oriented"); /*dictionary.set("linux", "rulez"); dictionary.set("mac", "beutifull"); dictionary.set("solaris", "old but gold"); dictionary.set("red hat", "new and fit"); dictionary.set("debian", "just old");*/ Writer writer = new Writer(dictionary, "Mr. Writer"); Reader reader1 = new Reader(dictionary, "Mrs Reader 1"); Reader reader2 = new Reader(dictionary, "Mrs Reader 2"); Reader reader3 = new Reader(dictionary, "Mrs Reader 3"); Reader reader4 = new Reader(dictionary, "Mrs Reader 4"); Reader reader5 = new Reader(dictionary, "Mrs Reader 5"); log.info("Inciando thread de writer"); writer.setPriority(Thread.MAX_PRIORITY); writer.start(); log.info("Inciando thread de reader Mrs Reader 1"); reader1.start(); log.info("Inciando thread de reader Mrs Reader 2"); reader2.start(); log.info("Inciando thread de reader Mrs Reader 3"); reader3.start(); log.info("Inciando thread de reader Mrs Reader 4"); reader4.start(); log.info("Inciando thread de reader Mrs Reader 5"); reader5.start(); }
public void testMultiThreaded() throws InterruptedException { int NUM_THREADS = 20; Writer[] w = new Writer[NUM_THREADS]; CountDownLatch startLatch = new CountDownLatch(1); for (int i = 0; i < NUM_THREADS; i++) w[i] = new Writer(i, startLatch); for (Writer writer : w) writer.start(); startLatch.countDown(); Thread.sleep(250); // now stop writers for (Writer writer : w) writer.running = false; for (Writer writer : w) writer.join(); // wait for the cache size to drop to CACHE_SIZE, up to a specified amount of time. long giveUpTime = System.currentTimeMillis() + (1000 * 10); // 10 sec while (cache.getAdvancedCache().getDataContainer().size() > 1 && System.currentTimeMillis() < giveUpTime) { // System.out.println("Cache size is " + cache.size() + " and time diff is " + (giveUpTime - // System.currentTimeMillis())); Thread.sleep(100); } assert cache.getAdvancedCache().getDataContainer().size() <= CACHE_SIZE : "Expected 1, was " + cache.size(); // this is what we expect the cache to be pruned to }
public void _testPut() throws Exception { // put any stuff List<NodeData> nodes = prepare(); Set<Writer> writers = new HashSet<Writer>(); try { // create readers for (int t = 1; t <= 100; t++) { NodeData[] ns = new NodeData[nodes.size()]; nodes.toArray(ns); Writer r = new Writer(ns, "writer #" + t, 50); writers.add(r); r.start(); } Thread.sleep(5 * 60 * 1000); } finally { // join for (Writer w : writers) { w.cancel(); w.join(); } // debug result for (Writer w : writers) { log.info(w.getName() + " " + (w.itemsProcessed)); } } }
private void testReadWrite(Random rng, Writer wr) throws InterruptedException { ArrayBlockingQueue<byte[]> q = newQueue(); InputStream is = create(q); wr.init(q); wr.start(); Reader rd = new Reader(rng, is); rd.run(); wr.join(); Assert.assertNull(wr.exn); Assert.assertNull(rd.exn); System.out.printf("sums %x -> %x\n", wr.getSum(), rd.getSum()); Assert.assertEquals(wr.getSum(), rd.getSum()); }
public void _testGetPutRemove() throws Exception { List<NodeData> nodes = prepare(); Set<Reader> readers = new HashSet<Reader>(); Set<Writer> writers = new HashSet<Writer>(); Set<Remover> removers = new HashSet<Remover>(); long start = System.currentTimeMillis(); try { // create readers for (int t = 1; t <= 100; t++) { NodeData[] ns = new NodeData[nodes.size()]; nodes.toArray(ns); Reader r = new Reader(ns, "reader #" + t); readers.add(r); r.start(); } // create writers for (int t = 1; t <= 5; t++) { NodeData[] ns = new NodeData[nodes.size()]; nodes.toArray(ns); Writer w = new Writer(ns, "writer #" + t, 1000); writers.add(w); w.start(); } // create removers for (int t = 1; t <= 5; t++) { NodeData[] ns = new NodeData[nodes.size()]; nodes.toArray(ns); Remover r = new Remover(ns, "remover #" + t, 1000); removers.add(r); r.start(); } log.info("Wait...."); // Thread.sleep(50400 * 1000); // 50400sec = 14h Thread.sleep(20 * 1000); // 20sec. log.info("Stopping"); } finally { // join for (Remover r : removers) { r.cancel(); r.join(); } for (Writer w : writers) { w.cancel(); w.join(); } for (Reader r : readers) { r.cancel(); r.join(); } // debug result long stop = System.currentTimeMillis() - start; long totalRead = 0; for (Reader r : readers) { totalRead += r.itemsProcessed; // log.info(r.getName() + " " + (r.itemsProcessed)); } for (Writer w : writers) { totalRead += w.itemsProcessed; // log.info(w.getName() + " " + (w.itemsProcessed)); } for (Remover r : removers) { totalRead += r.itemsProcessed; // log.info(r.getName() + " " + (r.itemsProcessed)); } double speed = totalRead * 1d / stop; log.info( "Total accessed " + totalRead + ", speed " + speed + " oper/sec., time " + (stop / 1000d) + "sec"); } }