多线程同步锁实现简单数据的同步输入与输出
Resource类
class Resource {
public String name;
public int age;
boolean flag = false;
}
Input类
/**
* Created by Aongi on 2017/4/30.
* Version 1.0
*/
class Input implements Runnable {
private final Resource r;
public Input(Resource r) {
this.r = r;
}
@Override
public void run() {
int a = 0;
//noinspection InfiniteLoopStatement
while (true) {
synchronized (r) {
if (r.flag) {
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (a % 2 == 0) {
r.name = "张三";
r.age = 20;
} else {
r.name = "李四";
r.age = 22;
}
r.flag = true;
r.notify();
}
a++;
}
}
}
Output类
/**
* Created by Aongi on 2017/4/30.
* Version 1.0
*/
class Output implements Runnable {
private final Resource r;
public Output(Resource r) {
this.r = r;
}
@Override
public void run() {
//noinspection InfiniteLoopStatement
while (true) {
synchronized (r) {
if (!r.flag) {
try {
r.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(r.name + "——————" + r.age);
r.flag = false;
r.notify();
}
}
}
}
最后来个Test类
/**
* Created by Aongi on 2017/4/30.
* Version 1.0
*/
class Test {
//main方法
public static void main(String[] args) {
Resource r = new Resource();
Input input = new Input(r);
Output output = new Output(r);
Thread in = new Thread(input);
Thread out = new Thread(output);
in.start();
out.start();
}
}