Java 多线程 简单实例 (消费者与生成者)的关系
PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习;
PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧!
1.定义生产消费环境
package second; public class Queue {
int value = ;
boolean isEmpty = true;
/**
* 生产者
* @param v
*/
public synchronized void put(int v){
if(!isEmpty){//如果存在数据没有被消费
try{
System.out.println("生产者等待...");
wait();
}catch(Exception e){ }
}
value ++;//本次生产1个
isEmpty = false;//设置为false(代表有东西了可以消费了)
System.out.println("生产者共生产数量:" + v);
notify();//通知消费者开始消费
} public synchronized int get(){
//如果消费数据没有了,消费者继续等...
if(isEmpty){
try{
System.out.println("消费者等待...");
wait();
}catch(Exception e){ }
}
value --;
if(value < ){
isEmpty = true;//如果消费完了,则设置为true
}
System.out.println("消费者消费一个,剩余:"+value);
notify();
return value;
}
}
2.生产者
package second; public class Producer extends Thread {
Queue q;
Producer(Queue q){
this.q = q;
}
public void run(){
for(int i=;i<;i++){//循环生产5次
q.put(i);
}
}
}
3.消费者
package second; public class Consumer extends Thread {
Queue q;
Consumer(Queue q){
this.q = q;
}
public void run(){
while(true){//永远的消费下去,直到不再生产为止
q.get();
}
}
}
4.线程调用
package second; public class Cao {
public static void main(String[] args){
Queue q = new Queue();//实例消费&生成工厂
Producer p = new Producer(q);//将工厂传入给生产者
Consumer c = new Consumer(q);//将工厂传入给消费者
p.start();//开启生成线程
c.start();//开启消费线程
}
}
Java 多线程 简单实例 (消费者与生成者)的关系的更多相关文章
- Java 多线程 简单实例 (Runnable)
1.多线程实例 package second; public class A implements Runnable { public char stat = '*'; public void run ...
- Java 多线程 简单实例 (Thread)
package second; public class A extends Thread { public void run(){ for(int i = 1;i <= 10 ; i++){ ...
- java多线程解决生产者消费者问题
import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ...
- 主题:Java WebService 简单实例
链接地址:主题:Java WebService 简单实例 http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...
- java多线程模拟生产者消费者问题,公司面试常常问的题。。。
package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ...
- java多线程编程实例
[转]这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下. 1.三个售票窗口同时出售20张票程序分析: ...
- Java多线程实现生产者消费者延伸问题
在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产品,他们共享一定数量的缓存. 这里用java多线程编程,实现生产者消费者问题的一种延伸,橘子苹果问题. 题目 ...
- 【多线程】java多线程实现生产者消费者模式
思考问题: 1.为什么用wait()+notify()实现生产者消费者模式? wait()方法可以暂停线程,并释放对象锁 notify()方法可以唤醒需要该对象锁的其他线程,并在执行完后续步骤,到了s ...
- Java多线程之生产者消费者问题<一>:使用synchronized keyword解决生产者消费者问题
今天看了一片博文,讲Java多线程之线程的协作,当中作者用程序实例说明了生产者和消费者问题,但我及其它读者发现程序多跑几次还是会出现死锁,百度搜了下大都数的样例也都存在bug,经过细致研究发现当中的问 ...
随机推荐
- VMware系统运维(三 )SQL Server 2008 R2安装
1. 点击"全新SQL Server 独立安装或向现有安装添加功能" 2.验证通过,点击确定. 3.输入数据库密钥,必须支持正版,不然微软打你屁屁,嘻嘻 4.不接受不让你过,所以不 ...
- oracle--insert
常规insert语法就不说了,还有些特殊用法 1. insert all into table1(col1,col2) values(v1,v2) into table2(col1,col2) va ...
- oracle--varchar2
1. varchar2列最多占用4000字节,但是能容纳多少字符就不一定了 使用sql查看字符集: select userenv('language') from dual;--select * fr ...
- 类、对象以及jvm运行内存解析
一.JVM内存的分析: 第一步:存放在硬盘上的程序首先要被加载到内存空间中. 第二步:内存中的jvm找到程序中main函数作为入口,然后开始执行. 第三步:执行过程中的内存管理:内存分为四个部分: 栈 ...
- GDB基本调试
调试时gcc -g -Wall -o Hello Hello.c gdb Hello -tui -g: 生成调试信息 -Wall: 编译器警告信息 -W: 警告信息 在调用GDB时,命令行指定-tui ...
- [改善Java代码]养成良好习惯,显式声明UID
建议11: 养成良好习惯,显式声明UID 我们编写一个实现了Serializable接口(序列化标志接口)的类, Eclipse马上就会给一个黄色警告:需要增加一个Serial Version ID. ...
- hdu 1892 树状数组
思路:就是一个很普通的二维树状数组,注意的是x1,y1不一定在x2,y2的左下方. #include<iostream> #include<cstring> #include& ...
- 【转】【CDC翻客】移动端App测试实用指南
译者注:本文从测试人员的角度出发,提出了100多个在测试移动App过程中需要考虑的问题.不管你是测试人员.开发.产品经理或是交互设计师,在进行移动App开发时,这些问题都很有参考价值.我和Queen ...
- SharePoint中 服务器发出意外响应。响应状态代码是"500"。
原因是由于服务器内存不够.
- get方法与post方法的使用
使用get方法获取页面的form内容 新建一个getform.html <html> <head> <title>Using Http Get Method< ...