public class ResTest {
public static void main(String[] args) {
Res r = new Res();
Input in = new Input(r);
Output out = new Output(r);
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
t1.start();
t2.start();
}
}
/*
* 1、将设置值和打印值的方法抽取到Res类中
* 2、在Res类中加锁
*/
class Res {
private String name;
private String sex;
private boolean flag = false;
private Lock lock = new ReentrantLock();
private Condition con1 = lock.newCondition();
private Condition con2 = lock.newCondition();
public void set() {
lock.lock();
int x = 0;
try {
while(true){
while (flag) {
try {
con1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (x == 0) {
this.name = "小强";
this.sex = "男";
} else {
this.name = "小红";
this.sex = "女";
}
System.out.println("set:"+this.name + "........" + this.sex);
x = (x + 1) % 2;
con2.signal();
flag = true;
}
} finally {
lock.unlock();
}
}