当前位置:   article > 正文

java多线程之生产者消费者问题_把栈改造为支持线程安全

把栈改造为支持线程安全

今天研究了一下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);

}

}

}

运行结果:



总结:

通过今天的学习,渐渐理解了线程的概念和多线程的基本用法,虽然还有很多不懂得地方,但只要不断学习,我相信总会学会的 ,加油。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/321680
推荐阅读
相关标签
  

闽ICP备14008679号