java生产者消费者初探
来源:互联网 发布:乌克兰航空怎么样 知乎 编辑:程序博客网 时间:2024/05/22 12:10
要求:生产者线程,消费者线程。初始产品数量为1,start两个线程后只有生产者生产后消费者才能消费,且生产者必须等待消费者消费完成后才能继续生产。
实现:
1):类设计
(1)产品类:有产品数量属性,信号量属性(两个线程通信,即根据此标示来让生产者线程和消费者线程休眠或者工作),以及两个synchronized方法(用于控制在任何时间只有一个线程操作创建的产品类实例)。
public class productor {private int num;public boolean flag=true;public productor() {num=1;}public int return_val() {return num;}public synchronized void add() {if(!flag){try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else {num++;flag=false;notifyAll();System.out.println("生产+1,当前数目:"+return_val());}}public synchronized void delete() {if(flag){try {wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else {num--;flag=true;notifyAll();System.out.println("消费减一,当前数目:"+return_val());}}}(2)生产者线程类:继承runable借口,实例化时需要传入目标产品类实例。
import java.lang.System;public class produceor implements Runnable {productor productor;public produceor(productor p){this.productor=p;}@Overridepublic void run() {while (true) {productor.add();}}}(3)消费者线程类:继承runable接口,实例化时需要传入目标产品类实例
public class consumer implements Runnable {private productor productor;public consumer(productor p) {// TODO Auto-generated constructor stubthis.productor=p;}@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {productor.delete();}}}2)测试及结果
测试方法:
public class test_consumer {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubproductor p=new productor();produceor p1=new produceor(p);consumer c1=new consumer(p);Thread t1=new Thread(p1);Thread t2=new Thread(c1);t2.start();t1.start();}}
0 0
- java生产者消费者初探
- 多线程初探之生产者消费者
- java多线程 消费者-生产者
- java生产者 消费者问题
- java生产者消费者
- java生产者消费者
- Java生产者消费者问题
- java多线程 消费者-生产者
- java生产者消费者问题
- java 多线程 生产者消费者
- JAVA [ 多线程 -- 生产者消费者 ]
- Java 生产者消费者问题
- java 生产者消费者问题
- java 生产者和消费者
- Java生产者消费者问题 .
- [Java] 生产者&消费者问题
- Java生产者消费者代码
- java 生产者与消费者
- The connection to adb is down, and a severe error has occured.
- 一样的远程服务不一样的服务体验
- SpringMVC中使用Interceptor拦截器
- 数据挖掘:Apriori算法
- 动作识别之STIP (Space-Time Interest Points)(三)
- java生产者消费者初探
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- Android PopupWindow显示在控件上方或者下方(demo)
- 基于Activiti的开源工作流引擎扩展框架——OpenWebFlow
- iOS sqlite
- 线性筛选素数和线性筛选欧拉函数【bzoj2190]
- 关于javascript严格模式下七种禁止使用的写法
- 【Android 非常基础】项目切换SVN路径,本地代码会怎么样呢?
- FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.