代码实现:
package java.thread;
/*
生产者消费者模式实现交替输出
*/
public class ThreadTest17 {
public static void main(String[] args) {
// 创建共享对象
Num num = new Num(1);
// 创建线程对象
Thread t1 = new Thread(new Odd(num));
Thread t2 = new Thread(new Even(num));
t1.setName("奇数");
t2.setName("偶数");
t1.start();
t2.start();
}
}
// 奇数
class Odd implements Runnable{
Num num;
public Odd(Num num) {
this.num = num;
}
@Override
public void run() {
while(true){
synchronized (num){
if (num.getI() % 2 == 0){
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "---->" + num.getI());
num.setI(num.getI() + 1);
num.notifyAll();
}
}
}
}
// 偶数
class Even implements Runnable{
Num num;
public Even(Num num) {
this.num = num;
}
@Override
public void run() {
while(true){
synchronized (num){
if (num.getI() % 2 != 0){
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "---->" + num.getI());
num.setI(num.getI() + 1);
num.notifyAll();
}
}
}
}
class Num {
private int i;
public Num() {
}
public Num(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
输出结果: