线程启动类
public class ThreadDemo06 {public static void main(String [] args){final MyQueue q = new MyQueue();FutureTask ft = new FutureTask(new Callable(){@Overridepublic Object call() throws Exception {q.write(234);return null;}});new Thread(ft,"writeThread").start();for(int i=1;i<=100;i++){FutureTask ft2 = new FutureTask(new Callable(){@Overridepublic Object call() throws Exception {q.read();return null;}});new Thread(ft2,String.valueOf(i)).start();}}
}
资源类:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.locks.ReentrantReadWriteLock;class MyQueue{private Object obj;private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock();public void read(){rwLock.readLock().lock();try {System.out.println(Thread.currentThread().getName()+"---"+this.obj);} catch (Exception e) {e.printStackTrace();}finally{rwLock.readLock().unlock();}}public void write(Object obj){rwLock.writeLock().lock();try {this.obj=obj;System.out.println(Thread.currentThread().getName()+"----"+this.obj);} catch (Exception e) {e.printStackTrace();}finally{rwLock.writeLock().unlock();}}
}