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多线程例子(生成者和消费者)的更多相关文章

  1. java 多线程例子

    java 多线程例子   编写具有多线程能力的程序经常会用到的方法有: run(), start(), wait(), notify(), notifyAll(), sleep(), yield(), ...

  2. Java 多线程学习笔记:生产者消费者问题

    前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章<阻塞队列实现生产者消费者模式>.在文中,使用的是Java的concurrent包中的阻塞队列来实现.在看完后 ...

  3. java 多线程并发系列之 生产者消费者模式的两种实现

    在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据 ...

  4. java多线程中的生产者与消费者之等待唤醒机制@Version1.0

    一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒:    Object类中提供了三个方法:    wait():等待    notify():唤醒单个线程    notify ...

  5. Java多线程设计模式(2)生产者与消费者模式

    1 Producer-Consumer Pattern Producer-Consumer Pattern主要就是在生产者与消费者之间建立一个“桥梁参与者”,用来解决生产者线程与消费者线程之间速度的不 ...

  6. Java多线程与并发——生产者与消费者应用案例

    多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品. package com.vince; /** * 生产者与消费者案例 * @author Admin ...

  7. Java多线程之并发协作生产者消费者设计模式

    两个线程一个生产者个一个消费者 需求情景 两个线程,一个负责生产,一个负责消费,生产者生产一个,消费者消费一个 涉及问题 同步问题:如何保证同一资源被多个线程并发访问时的完整性.常用的同步方法是采用标 ...

  8. java多线程中的生产者与消费者之等待唤醒机制@Version2.0

    二.生产者消费者模式的学生类成员变量生产与消费demo, @Version2.0 在学生类中添加同步方法:synchronized get()消费者,synchronized set()生产者 最终版 ...

  9. java多线程系列15 设计模式 生产者 - 消费者模式

    生产者-消费者 生产者消费者模式是一个非常经典的多线程模式,比如我们用到的Mq就是其中一种具体实现 在该模式中 通常会有2类线程,消费者线程和生产者线程 生产者提交用户请求 消费者负责处理生产者提交的 ...

随机推荐

  1. qcom wlan kernel 解读 WCNSS_qcom_cfg.ini 文件

    CORE/HDD/src/wlan_hdd_main.c 模块初始化: static int __init hdd_module_init ( void) { return hdd_driver_in ...

  2. 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...

  3. 多线程系列八:线程安全、Java内存模型(JMM)、底层实现原理

    一.线程安全 1.  怎样让多线程下的类安全起来 无状态.加锁.让类不可变.栈封闭.安全的发布对象 2. 死锁 2.1 死锁概念及解决死锁的原则 一定发生在多个线程争夺多个资源里的情况下,发生的原因是 ...

  4. logbook日志系统

    python中替代logging的日志系统. 不过比之前的logging难理解. 先上打印到屏幕上的代码和存到日志文件中的代码: #!/usr/bin/env python3 # -*- coding ...

  5. 在Eclipse中设置进行JNI的头文件编译方法(转 http://blog.csdn.net/mirkerson/article/details/17187109)

    这两天在搞NDK开发,JNI的头文件进行编译的时候,要跑到对应的class文件路径下(通常是工程的bin目录),进行编译生成,很是不便,也容易出错,所以考虑在Eclipse中作为外部工具引入,所以便查 ...

  6. R语言绘图时的边界碰撞问题

    当我们在绘图时,经常会遇到这样的问题,添加的文字标记超出了坐标系的问题,导致文字显示不全 比如下面这个例子: plot(c(1,5),c(1,5)) text(5,5.1,"ABCDEF&q ...

  7. Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0

    [转]Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0 1. 使用代码方式进行组件注册[依赖服务类] using System; using System.Co ...

  8. iOS:App 内部更改使用语言/ 重定义系统的宏

    代码部分 #undef NSLocalizedString #define NSLocalizedString(key, comment) \ NSLocalizedStringFromTable(k ...

  9. ubuntu:如何制作类似jeso的系统?

    chroot 下载ubuntu的core包或base包 chroo后,先安装grub,再kernel,基本就ok了! 提示:mount --bind /proc  newroot/proc 可能的问题 ...

  10. qt creator如何实现转到槽功能

    ui_mainwindow.h .