java多线程生产者消费者
//Java Thread producer customer
class ThreadTest
{
public static void main(String[] args)
{
Q q=new Q(); Producer p=new Producer(q);
Customer c=new Customer(q);
Thread t0=new Thread(p);
Thread t1=new Thread(c);
t0.start();
t1.start(); for(int i=0;i<50;i++)
{
if(i==25)
{
p.stop();
c.stop();
} System.out.println(Thread.currentThread().getName());
}
}
} class Q
{
String name="empty";
String gender="empty";
boolean isEmpty=true; public synchronized void Put(String name,String gender)
{
if (!isEmpty) {
try {wait();} catch (Exception ex) {}
}
this.name = name;
try {Thread.sleep(1);} catch (Exception ex) {}
this.gender = gender;
isEmpty = false;
notify();
} public synchronized void Get()
{
if(isEmpty)
{
try{wait();}catch(Exception ex){}
}
System.out.println("name:"+this.name+"__gender:"+this.gender);
isEmpty=true;
notify();
}
} class Producer implements Runnable
{
Q q;
boolean isStop=false;
public void stop()
{
this.isStop=true;
}
public Producer(Q q)
{
this.q=q;
} public void run() {
int i = 0;
while (!isStop) {
if (i == 0) {
q.Put("Tim", "male"); } else {
q.Put("Lian", "female");
}
i = (i + 1) % 2;
}
}
} class Customer implements Runnable
{
Q q;
boolean isStop=false;
public void stop()
{
this.isStop=true;
}
public Customer(Q q)
{
this.q=q;
}
public void run()
{
while(!isStop)
{
q.Get();
}
}
}
java多线程生产者消费者的更多相关文章
- java多线程 生产者消费者模式
package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...
- java多线程 生产者消费者案例-虚假唤醒
package com.java.juc; public class TestProductAndConsumer { public static void main(String[] args) { ...
- Java 多线程 - 生产者消费者问题
https://www.cnblogs.com/hckblogs/p/7858545.html
- java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...
- Java实现生产者消费者问题与读者写者问题
摘要: Java实现生产者消费者问题与读者写者问题 1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从 ...
- Java实现多线程生产者消费者模式的两种方法
生产者消费者模式:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据.生产者生产一个,消费者消费一个,不断循环. 第一种实现方法,用BlockingQueue阻塞队 ...
- Java实现多线程生产者消费者模型及优化方案
生产者-消费者模型是进程间通信的重要内容之一.其原理十分简单,但自己用语言实现往往会出现很多的问题,下面我们用一系列代码来展现在编码中容易出现的问题以及最优解决方案. /* 单生产者.单消费者生产烤鸭 ...
- java实现多线程生产者消费者模式
1.概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消 ...
- Java设计模式—生产者消费者模式(阻塞队列实现)
生产者消费者模式是并发.多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据.这篇文章我们来看看什么是生产者消费者模式,这个问 ...
随机推荐
- 转 如何理解 重要性采样(importance sampling)
分类: 我叫学术帖2011-03-25 13:22 3232人阅读 评论(4) 收藏 举报 图形 重要性采样是非常有意 思的一个方法.我们首先需要明确,这个方法是基于采样的,也就是基于所谓的蒙特卡洛法 ...
- mac vim 使用
再使用Mac编辑文件时感觉非常不爽,没有语法高亮,只能通过设置改变所有字体为同一个颜色,看起来还是别扭, 于是找到方法使用vim时可以实现语法高亮显示,操作步骤如下: 1.进入/usr/share/v ...
- 彻底理解JAVA动态代理
代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问. 代理模式的结构如下图所示. 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念. 代理模式示例代码 public ...
- js map
// js通用方法 // map对象定义 function Map() { var struct = function(key, value) { this.key = key; this.value ...
- Quiz(贪心,快速幂乘)
C. Quiz time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- JavaWeb学习系列——第一个JavaWeb程序
创建JavaWeb项目 Eclipse中新建一个Dynamic Web Project 指定项目名称.依赖环境 勾选生成web.xml选项 更改项目编译输出目录,项目右键 ->propertie ...
- rails从4.0.2降到3.2.9
初学ruby和rails,想和教程同步,把rails的版本降下来.从4.0.2降到3.2.9 [lucas@lucas ~]$ rails -v Rails 4.0.2 尝试了 sudo gem un ...
- MyBatis知多少(17)MyBatis和JDBC
有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会 ...
- [Shell] 读取脚本路径
以下是几种在 Shell 中读取路径的方法. 返回当前工作目录绝对路径 echo $(pwd) 返回 shell 第一个参数.如果被执行对象位于 PATH 路径中,则返回该对象绝对路径:否则返回被执行 ...
- 批量修改Project视图中Prefab的名字
简要代码如下: using UnityEditor; using UnityEngine; using System.IO; using System.Collections; using Syste ...