您的位置:首页 > 编程语言 > Java开发

java多线程之生产者消费者问题

2016-12-26 14:44 441 查看
今天研究了一下Java多线程,根据老师上课讲的和写的,自己写了一下多线程中的经典问题-----生产者消费者经典问题,

package producerconsumer;

public class ProducerConsumer {

public static void main(String[] args) {

LanZi lz = new LanZi();//创建一个篮子;

Producer1 p = new Producer1(lz);//创建一个生产者,同时把篮子传给它;

Consumer c = new Consumer(lz);//创建一个消费者;同时把篮子传给它;

p.start();//开启生产者线程;

c.start();//开启消费者线程;

}

}

//创建一个苹果类

class Apple{

String name;

public Apple(int num) {

this.name = "第"+num+"个苹果";

}

@Override

public String toString() {

return name;

}

}

//创建一个篮子类

class LanZi{

Apple[] apples = new Apple[6];

//定义一个下标索引

int index = 0;

//采用同步处理机制

//放入苹果;

public synchronized void push(Apple apple){

while(index == apples.length){

try {

this.wait();//进入就绪态等待唤醒;

} catch (InterruptedException e) {

e.printStackTrace();

}

}

this.notify();//唤醒当前线程

apples[index] = apple;

index++;

}

//取出苹果;

public synchronized Apple pop(){

while(index == 0){

try {

this.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

this.notify();//唤醒当前线程

this.index--;

return apples[index];

}

}

//创建一个生产者类继承于线程类;

class Producer1 extends Thread{

LanZi lz;

public Producer1(LanZi lz) {

this.lz = lz;

}

@Override

public void run() {

for(int i=1;i<100;i++){

Apple apple = new Apple(i);

System.out.println("生产:"+apple);

lz.push(apple);

}

}

}

//创建一个消费者类;

class Consumer extends Thread{

LanZi lz;

public Consumer(LanZi lz) {

this.lz = lz;

}

@Override

public void run() {

for(int i=1;i<100;i++){

Apple apple = lz.pop();

System.out.println("吃了"+apple);

}

}

}

运行结果:



总结:

通过今天的学习,渐渐理解了线程的概念和多线程的基本用法,虽然还有很多不懂得地方,但只要不断学习,我相信总会学会的 ,加油。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: