一、奇数偶数
1.Date
public class Date {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Date(int num) {
super();
this.num = num;
}
public synchronized void Even() {
this.notifyAll();
if(num%2==0) {
System.out.println("Even"+Thread.currentThread().getName()+"-->"+(num++));
try {
Thread.sleep(1000);
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public synchronized void Odd() {
this.notifyAll();
if(num%2!=0) {
System.out.println("Odd"+Thread.currentThread().getName()+"-->"+(num++));
try {
Thread.sleep(1000);
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.AThread
public class AThread implements Runnable {
private Date date;
public AThread(Date date) {
super();
this.date = date;
}
@Override
public void run() {
while(true) {
date.Even();
}
}
}
3.BThread
public class BThread implements Runnable {
private Date date;
public BThread(Date date) {
super();
this.date = date;
}
@Override
public void run() {
while(true) {
date.Odd();
}
}
}
4.Test
public class Test {
public static void main(String[] args) {
Date date=new Date(0);
AThread a=new AThread(date);
BThread b=new BThread(date);
Thread t1=new Thread(a);
Thread t2=new Thread(b);
t1.start();
t2.start();
}
}
二、生产者,消费者
1.Food
package com.pro.food;
public class Food {
private String name;
private String type;
private int j;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getJ() {
return j;
}
public void setJ(int j) {
this.j = j;
}
public Food(int j) {
super();
this.j = j;
}
}
2.Product
package com.pro.food;
public class Product implements Runnable {
private Food food;
private int i=0;
public Product(Food food) {
super();
this.food = food;
}
@Override
public void run() {
while(true) {
synchronized(food) {
food.notifyAll();
if(food.getJ()==0) {
if(i%2==0) {
food.setType("炒饭");
food.setName("蛋炒饭");
food.setJ(1);
}else if(i%2!=0) {
food.setType("包子");
food.setName("肉包");
food.setJ(1);
}
i++;
System.out.println("生产了"+food.getType()+"-"+food.getName());
}else if(food.getJ()==1) {
try {
Thread.sleep(1000);
food.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
3.Consumer
package com.pro.food;
public class Consumer implements Runnable {
private Food food;
public Consumer(Food food) {
super();
this.food = food;
}
@Override
public void run() {
while(true) {
synchronized (food) {
food.notifyAll();
if(food.getJ()==1) {
System.out.println("拿到了"+food.getType()+"-"+food.getName());
food.setJ(0);
}else if(food.getJ()==0) {
try {
Thread.sleep(1000);
food.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
4.Test
package com.pro.food;
public class Test {
public static void main(String[] args) {
Food food=new Food(0);
Product pro=new Product(food);
Consumer con=new Consumer(food);
Thread t1=new Thread(pro);
Thread t2=new Thread(con);
t1.start();
t2.start();
}
}