0
点赞
收藏
分享

微信扫一扫

java readwritelock 死锁 实例

余寿 2022-09-23 阅读 125

public class ReadThread implements Runnable{



TableControl tc;



public ReadThread(TableControl tc){

this.tc=tc;

};

@Override

public void run() {

tc.readLock().lock();

System.out.println("ReadThread");

tc.get();

tc.readLock().unlock();

}

}





















public class WriteThread implements Runnable{

TableControl tc;

public WriteThread(TableControl tc){
this.tc=tc;
};
@Override
public void run() {
tc.writeLock().lock();
System.out.println("WriteThread");
tc.add(100);
tc.writeLock().unlock();
}


}

















import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;




public class TableControl {




private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();;




private int i = 0;




public void get() {
System.out.println(i);
writeLock().lock();
System.out.println(System.currentTimeMillis());
add(50);
writeLock().unlock();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void add(int v) {
i += v;
System.out.println(i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}




public Lock readLock() {
return readWriteLock.readLock();
}




public Lock writeLock() {
return readWriteLock.writeLock();
}




}

















public class TestMain {



public static void main(String args[]){


TableControl tc=new TableControl();
WriteThread wt=new WriteThread(tc);
ReadThread rt=new ReadThread(tc);

Thread t1 =new Thread(wt);
Thread t2 =new Thread(rt);


t2.start();
// t1.start();


}





}

举报

相关推荐

0 条评论