javaSE基础编程——多线程(生产者和消费者)
来源:互联网 发布:调度算法有哪些 编辑:程序博客网 时间:2024/06/05 19:58
package com.cissst.software.model;
/**
* 产品类
* @author Administrator
* @date 2015-8-10
*/
public class Product {
//产品编号
private int id;
public Product(int id) {
this.id = id;
}
public String toString() {
return "Product:" + id;
}
public int getId() {
return id;
}
}
package com.cissst.software.model;
/**
* 筐子类
* @author Administrator
* @date 2015-8-10
*/
public class Storage {
/**
* 筐子中存放6个产品
*/
private Product[] cells = new Product[6];
//当前栈顶指针
private int inPos=0;
/**
* 往筐子中放入产品
* @param product
*/
public synchronized void push(Product product){
//栈满
while(inPos == cells.length){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
cells[inPos] = product;
System.out.println(Thread.currentThread().getName()+"生产了第"+product.getId()+"个产品");
inPos ++;
this.notify();
}
/**
* 从筐子中取出产品
* @return
*/
public synchronized Product pop(){
while(inPos == 0){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
inPos --;
Product data = cells[inPos];
System.out.println(Thread.currentThread().getName()+"消费了第"+data.getId()+"个产品");
this.notify();
return data;
}
}
package com.cissst.software.Thread;
import com.cissst.software.model.Product;
import com.cissst.software.model.Storage;
public class ConsumeThread implements Runnable {
private Storage storage ;
public ConsumeThread(){
}
public ConsumeThread(Storage storage){
this.storage = storage;
}
@Override
public void run() {
for(int i=1;i<=20;i++){
Product product =storage.pop();
// System.out.println("消费了第" +product.getId()+"个产品");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.cissst.software.Thread;
import com.cissst.software.model.Storage;
public class MainThread {
/**
* @param args
*/
public static void main(String[] args) {
Storage storage = new Storage();
//创建生产者对象
ProduceThread produce = new ProduceThread(storage);
// //启动生产线程
// new Thread(produce).start();
//创建第一个生产者线程
Thread t1 = new Thread(produce,"生产一");
t1.start();
//创建第二个生产者线程
Thread t2 = new Thread(produce,"生产二");
t2.start();
//创建消费者对象
ConsumeThread consumeThread = new ConsumeThread(storage);
// //启动消费线程
// new Thread(consumeThread).start();
//创建第一个消费者线程
Thread c1 = new Thread(consumeThread,"消费者一");
c1.start();
//创建第二个消费者线程
Thread c2 = new Thread(consumeThread,"消费者二");
c2.start();
}
}
package com.cissst.software.Thread;
import com.cissst.software.model.Product;
import com.cissst.software.model.Storage;
/**
* 生产者线程:
* 生产20个苹果
* @author Administrator
* @date 2015-8-10
*/
public class ProduceThread implements Runnable {
private Storage storage ;
public ProduceThread(){
}
public ProduceThread(Storage storage){
this.storage = storage;
}
@Override
public void run() {
for(int i=1;i<=20;i++){
Product product = new Product(i);
storage.push(product);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- javaSE基础编程——多线程(生产者和消费者)
- -java多线程——生产者和消费者
- C#多线程(二)——生产者和消费者实例
- Java 多线程编程(生产者和消费者问题以及死锁)
- 多线程编程之生产者和消费者模型
- 多线程——生产者消费者
- 多线程生产者和消费者
- 多线程,生产者和消费者
- 多线程,生产者和消费者
- 多线程--生产者和消费者
- linux 多线程编程之——消费者与生产者
- Java多线程编程核心技术——生产者消费者模型
- javaSE-多线程间通信-生产者消费者例子
- JAVA基础——多线程同步实现(生产者/消费者模型)
- 多线程学习Demo注解(3)——生产者和消费者
- 黑马程序员——Java---多线程-生产者和消费者
- java多线程线程通信——生产者和消费者
- 多线程经典——生产者和消费者问题
- 断舍离
- 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure,confusion matrix
- python编程初学者入门案例-猜数游戏和天气查询
- Java类的多态机制
- Java泛型程序设计知识梳理
- javaSE基础编程——多线程(生产者和消费者)
- 活动目录创建与删除的CheckList!
- Android一些设计原则杂项
- 条款10 令operator=返回一个 reference to *this
- CocoaPods 简介 转自唐巧的博客
- JavaScript之浏览器对象编程练习
- 易信客户端导出聊天记录方法
- python的测试框架(一) -- 单元测试框架
- SLURM Array Job