package 读锁和写锁;
import java.util.concurrent.locks.ReentrantLock;
public class Test1 {
static class Dog{
public String name = "dog";
private volatile int status = 0;
private volatile ReentrantLock reentrantLock = new ReentrantLock();
public String getName() {
while (!setStatus(1));
try {
return name;
}finally {
setStatus0();
}
}
public void setName(String name) {
try{
while (!setStatus(2));
this.name = name;
}finally {
setStatus0();
}
}
public int getStatus() {
return status;
}
private boolean setStatus0(){
this.status = 0;
return true;
}
public boolean setStatus(int status) {
try {
reentrantLock.lock();
if (status == 1) {
if (status == 0) {
this.status = status;
}
return true;
}
if (status == 2) {
if (this.status == 2){
return true;
}
if (this.status == 0) {
this.status = status;
return true;
}
}
}finally {
reentrantLock.unlock();
}
return false;
}
}
public static void main(String[] args) {
Dog dog = new Dog();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(dog.getName());
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
dog.setName("zzz");
}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(dog.getName());
}
});
t1.start();
t2.start();
t3.start();
}
}
java 模拟实现读写锁(By ReentranLook
最新推荐文章于 2022-08-31 06:29:59 发布