多线程之生产者和消费者案例
首先我们必须得定义一个生产者和消费者存放和获取资源的公共厂库,里面有生产者存放产品的方法,消费者获取产品的方法!在这里我们定义为Box类!代码如下:
public class Box {
private int milk;
private Boolean state = false;
public synchronized void put(int milk){
if(state){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.milk=milk;
System.out.println("生产者将第"+milk+"瓶奶放入奶箱中");
state = true;
notifyAll();
}
public synchronized void get(){
if(!state){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("消费者从奶箱中将第"+milk+"瓶奶取走");
state = false;
notifyAll();
}
}
接下来我们需要定义一个生产者类和一个消费者的类,代码如下:
public class Producer implements Runnable {
private Box b;
public Producer(Box b) {
this.b=b;
}
@Override
public void run() {
for(int i=1; i<=5; i++){
b.put(i);
}
}
}
public class Customer implements Runnable{
private Box b;
public Customer(Box b) {
this.b=b;
}
@Override
public void run() {
while (true){
b.get();
}
}
}
多线程实现方法有两种:
第一种是创建一个类直接继承Thread类,然后重写里面的run()方法,多线程的执行代码块就被封装在里面;
第二种是创建一个类实现Runnable接口,重写run()方法,多线程执行的代码也被封装到里面了;
接下来就是创建一个测试类,代码如下:
```java
public class BoxDemo {
public static void main(String[] args) {
Box b = new Box();
Producer p = new Producer(b);
Customer c = new Customer(b);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}