/bench/kilim/bench/ThreadPipePingPong.java
http://github.com/kilim/kilim · Java · 72 lines · 58 code · 8 blank · 6 comment · 3 complexity · 1b05df068ab5cb07afe2b0bc6ce06cf4 MD5 · raw file
- /* Copyright (c) 2006, Sriram Srinivasan
- *
- * You may distribute this software under the terms of the license
- * specified in the file "License"
- */
- package kilim.bench;
- import java.io.PipedInputStream;
- import java.io.PipedOutputStream;
- // Create two threads, have a message ping pong between them using pipes.
- public class ThreadPipePingPong {
- public static void main(String args[]) throws Exception {
- int ntimes = args.length == 0 ? 1000 : Integer.parseInt(args[0]);
- PipedInputStream pi_in = new PipedInputStream();
- PipedOutputStream pi_out = new PipedOutputStream();
- PipedInputStream po_in = new PipedInputStream(pi_out);
- PipedOutputStream po_out = new PipedOutputStream(pi_in);
-
- PongThread po = new PongThread(po_in, po_out);
- PingThread pi = new PingThread(ntimes, pi_in, pi_out);
- po.start();
- pi.start();
- }
- }
- class PingThread extends Thread {
- int ntimes;
- PipedInputStream in;
- PipedOutputStream out;
- PingThread(int n, PipedInputStream i, PipedOutputStream o) {
- ntimes = n;
- in = i;
- out = o;
- }
- public void run() {
- try {
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ntimes; i++) {
- out.write(100); out.flush(); //ping
- in.read(); // wait for pong
- }
- System.out.println("Elapsed (" + ntimes + " iters) : " +
- (System.currentTimeMillis() - begin) + " millis");
- System.exit(0);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- class PongThread extends Thread {
- PipedInputStream in;
- PipedOutputStream out;
- PongThread(PipedInputStream i, PipedOutputStream o) {
- in = i;
- out = o;
- }
- public void run() {
- try {
- while (true) {
- in.read();
- out.write(200); out.flush();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }