线程启动类
public class ThreadDemo06 {
public static void main(String [] args){
final MyQueue q = new MyQueue();
FutureTask ft = new FutureTask(new Callable(){
@Override
public 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(){
@Override
public 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();
}
}
}