通过生产者和消费者模型实现交替输出奇偶数,要求两个线程共享同一个对象。
package com.lh.java.Thread;
public class homework {
public static void main(String[] args) {
Num num = new Num(); // 创建一个共享的对象,
Thread t1 = new Thread(new even(num));
Thread t2 = new Thread(new odd(num));
t1.setName("偶数");
t2.setName("奇数");
t1.start();
t2.start();
}
}
class even implements Runnable{
private Num num ;
public even(Num num) {
this.num = num;
}
@Override
public void run() {
synchronized (num){ //加锁
//使用死循环一直生产
while (true){
if(num.i % 2 == 1){// 是奇数就wait
try {
num.wait();//让当前线程进入等待状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"--->"+(num.i++));
num.notify();
}
}
}
}
class odd implements Runnable{
private Num num ;
public odd(Num num) {
this.num = num;
}
@Override
public void run() {
synchronized (num){
//使用死循环
while (true){
if(num.i % 2 == 0){
try {
num.wait();//让当前线程进入等待状态,
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"--->"+(num.i++));
num.notify();
}
}
}
}
class Num{
int i = 0;
}