java多线程例子(生成者和消费者)
Info.cs 商品
public class Info {
boolean flag=false;
private String name="张三";
private int age=30;
public synchronized void set(String name,int age)
{
try
{
if(!flag)
super.wait();
}
catch(InterruptedException ex)
{
System.out.println(ex.getStackTrace());
}
try
{
this.name=name;
Thread.sleep(100);
this.age=age;
}
catch(InterruptedException ex)
{
System.out.println(ex.getStackTrace());
}
flag=false;
super.notify(); //唤醒调用了wait的方法线程
}
public synchronized void get()
{
try
{
if(flag)
super.wait();
}
catch (InterruptedException ex)
{
System.out.println(ex.getStackTrace());
}
try
{
Thread.sleep(100);
System.out.println("name:"+name+" age:"+age);
}
catch(InterruptedException ex)
{
System.out.println(ex.getStackTrace());
}
flag=true;
super.notify();
}
}
Producter.cs 生产者类
public class Producter implements Runnable{
Info info=null;
boolean flag=false;
final int count=20;
public Producter(Info info)
{
this.info=info;
}
public void run()
{
for(int i=0;i<count;i++)
{
if(flag)
{
this.info.set("张三",30);
flag=false;
}
else
{
this.info.set("李四",40);
flag=true;
}
}
}
}
Customer.cs 消费者类
public class Customer implements Runnable{
Info info;
final int count=20;
public Customer(Info info)
{
this.info=info;
}
public void run()
{
for(int i=0;i<count;i++)
{
info.get();
}
}
}
TestThread.cs 主类
public class TeshThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
Info info=new Info();
Producter p=new Producter(info);
Customer c=new Customer(info);
new Thread(p).start();
new Thread(c).start();
}
}
运行结果:
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
java多线程例子(生成者和消费者)的更多相关文章
- java 多线程例子
java 多线程例子 编写具有多线程能力的程序经常会用到的方法有: run(), start(), wait(), notify(), notifyAll(), sleep(), yield(), ...
- Java 多线程学习笔记:生产者消费者问题
前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章<阻塞队列实现生产者消费者模式>.在文中,使用的是Java的concurrent包中的阻塞队列来实现.在看完后 ...
- java 多线程并发系列之 生产者消费者模式的两种实现
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据 ...
- java多线程中的生产者与消费者之等待唤醒机制@Version1.0
一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒: Object类中提供了三个方法: wait():等待 notify():唤醒单个线程 notify ...
- Java多线程设计模式(2)生产者与消费者模式
1 Producer-Consumer Pattern Producer-Consumer Pattern主要就是在生产者与消费者之间建立一个“桥梁参与者”,用来解决生产者线程与消费者线程之间速度的不 ...
- Java多线程与并发——生产者与消费者应用案例
多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品. package com.vince; /** * 生产者与消费者案例 * @author Admin ...
- Java多线程之并发协作生产者消费者设计模式
两个线程一个生产者个一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性.常用的同步方法是采用标 ...
- java多线程中的生产者与消费者之等待唤醒机制@Version2.0
二.生产者消费者模式的学生类成员变量生产与消费demo, @Version2.0 在学生类中添加同步方法:synchronized get()消费者,synchronized set()生产者 最终版 ...
- java多线程系列15 设计模式 生产者 - 消费者模式
生产者-消费者 生产者消费者模式是一个非常经典的多线程模式,比如我们用到的Mq就是其中一种具体实现 在该模式中 通常会有2类线程,消费者线程和生产者线程 生产者提交用户请求 消费者负责处理生产者提交的 ...
随机推荐
- 关于Unity中新版动画系统的使用
Mecanim动画 1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的 ...
- 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...
- CentOS 7 之前好好的,突然一天启动时黑屏,没有登陆界面了(配置 network-scripts 连网)
原因: 百度大神说是Gnome(一套纯粹自由的计算机软件,运行在操作系统上,提供图形桌面环境)不行了. 解决方法: 1. 重启系统,ctrl + alt + F2 进入命令行界面. 2. sudo s ...
- e816. 创建工具栏
A toolbar can be either horizontal or vertical. When the orientation is horizontal, the objects in t ...
- e783. 监听对JList中项双击和三击
// Create a list String[] items = {"A", "B", "C", "D"}; JLis ...
- ibatis中 $ 于 # 的 区别?
转自: http://www.blogjava.net/lsbwahaha/archive/2009/04/16/266026.html 一个项目中在写ibatis中的sql语句时,where use ...
- C# 获取web.config配置文件
.ConfigurationManager提供对客户端应用程序配置文件的访问. 其有两个属性1.ConnectionStrings 获取当前应用程序默认配置的 ConnectionStringsSec ...
- js 创建多行字符串
function heredoc(fn) { ,-).join('\n') + '\n' } var tmpl = heredoc(function(){/* !!! 5 html include h ...
- T4 好用的Vs扩展
- Centos yum安装java jdk1.8
yum -y install java-1.8.0-openjdk* 安装后 java -version查看版本 检验是否安装成功. 其安装位置 /usr/lib/jvm/java-1.8.0-ope ...