赞
踩
今天研究了一下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);
}
}
}
运行结果:
总结:
通过今天的学习,渐渐理解了线程的概念和多线程的基本用法,虽然还有很多不懂得地方,但只要不断学习,我相信总会学会的 ,加油。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。