/** * 2007-6-19 * Queue.java * package ReadWriteLock * TODO As a shared concurrent resource * levi */ package ReadWriteLock;
import java.util.*; /** * @author levi * */ public class Queue { private LinkedList queue = new LinkedList(); private ReadWriteLock rwLock = new ReadWriteLock();
public Queue(String str){ StringTokenizer st = new StringTokenizer(str.toString()); while(st.hasMoreTokens()) queue.add(st.nextToken()); } public Object read() throws InterruptedException{ rwLock.lockReader(); try{ String s = ""; for(int i = 0;i < queue.size();i++){ s += queue.remove(0); } return s; } finally{ rwLock.unlockReader(); } } public void write(Object obj) throws InterruptedException{ rwLock.lockWriter(); try{ StringTokenizer st = new StringTokenizer(obj.toString()); while(st.hasMoreTokens()) queue.add(st.nextToken()); } finally{ rwLock.unlockWriter(); } } }
/** * 2007-6-19 * Reader.java * package ReadWriteLock * TODO As a reader to read data concurrently from queue * levi */ package ReadWriteLock;
public class Reader extends Thread{ private Queue queue; public Reader(Queue queue){ this.queue = queue; } public void run(){ try{ System.out.println(Thread.currentThread().getName() + " Query: " + queue.read().toString()); } catch(InterruptedException ie){ } } }
Reader类。就是将read读入的内容显示出来。
/** * 2007-6-19 * Writer.java * package ReadWriteLock * TODO As a writer to write data to queue * levi */ package ReadWriteLock;
public class Writer extends Thread{ private Queue queue; private String request; public Writer(Queue queue,String request){ this.queue = queue; this.request = request; } public void run(){ try{ queue.write(request); } catch(InterruptedException ie){ } } }
Writer。负责写入一个request
/** * 2007-6-19 * Test.java * package ReadWriteLock * TODO the main thread * levi */ package ReadWriteLock;
/** * @author levi * */ public class Test { public static void main(String [] args){ Queue q = new Queue("* * * * * * * * * *"); new Writer(q,"I find that I had fallen into you, beautiful girl").start(); new Writer(q,"But also I am wasting my time,flower becomes air").start(); new Reader(q).start(); new Reader(q).start(); new Reader(q).start(); new Reader(q).start(); new Reader(q).start(); } }