java_Thread生产者与消费者 Demo
package com.bjsxt.Thread.Demo;
public class ProducerConsumer {
/**
* 生产者与消费者
* @param args
*/
public static void main(String[] args) {// 模拟线程
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
new Thread(p).start();// 开启线程
new Thread(c).start();// 开启线程
}
} /**
* Woto类
*/
class WoTo {
int id;
WoTo(int id) {
this.id = id;
}
public String toString() {
return "WoTo : " + id;
}
} /**
* 框类(用来装馒头)
* @author wenfei
*/
class SyncStack {
int index = 0;
WoTo[] arrwt = new WoTo[6]; public synchronized void push(WoTo wt) { while (index == arrwt.length) { try {
this.wait();// 暂定当前对象 } catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();// 叫醒当前线程
arrwt[index] = wt;
index++;
} public synchronized WoTo pop() {
while (index == 0) { try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
index--;
return arrwt[index];
}
} /**
* 生产者
*
* @author wenfei
*/
class Producer implements Runnable {
SyncStack ss = null; Producer(SyncStack ss) {
this.ss = ss;
} @Override
public void run() {
// 生产wt
for (int i = 0; i <= 100; i++) {
WoTo wt = new WoTo(i);
ss.push(wt);// 往篮子里装窝头
System.out.println("生产了--->" + wt);
try {
// Thread.sleep(1000);//每生产一个睡眠一秒
Thread.sleep((int) Math.random() * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} } /**
* 消费者
*
* @author wenfei
*/
class Consumer implements Runnable {
SyncStack ss = null; Consumer(SyncStack ss) {
this.ss = ss;
} @Override
public void run() {
for (int i = 0; i <= 100; i++) {
WoTo wt = ss.pop();
System.out.println("消费了--->" + wt);
try {
// Thread.sleep(1000);//每消费一个睡眠一秒
Thread.sleep((int) Math.random() * 1000);//
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(wt);
}
} }
java_Thread生产者与消费者 Demo的更多相关文章
- Scala调用Kafka的生产者和消费者Demo,以及一些配置参数整理
kafka简介 Kafka是apache开源的一款用Scala编写的消息队列中间件,具有高吞吐量,低延时等特性. Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受 ...
- java多线程中的生产者与消费者之等待唤醒机制@Version1.0
一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒: Object类中提供了三个方法: wait():等待 notify():唤醒单个线程 notify ...
- JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止
JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...
- Kafka 生产者和消费者入门代码基础
这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...
- Java中的生产者、消费者问题
Java中的生产者.消费者问题描述: 生产者-消费者(producer-consumer)问题, 也称作有界缓冲区(bounded-buffer)问题, 两个进程共享一个公共的固定大小的缓冲区(仓库) ...
- Java 多线程基础(十二)生产者与消费者
Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...
- 母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
简介 多线程通信一直是高频面试考点,有些面试官可能要求现场手写生产者/消费者代码来考察多线程的功底,今天我们以实际生活中母鸡下蛋案例用代码剖析下实现过程.母鸡在鸡窝下蛋了,叫练从鸡窝里把鸡蛋拿出来这个 ...
- 生产者与消费者以及ActiveMQ
生产者与消费者以及ActiveMQ 一. 多线程实现生产者与消费者 1.1 生产者与消费者头文件 #pragma once #include <iostream> #include < ...
- 【C# Task】System.Threading.Channels 生产者和消费者模式
前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel. Channel在% dotnet add package System.Threading.Channels 而在Co ...
随机推荐
- 关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法总结
遇到此问题先需确认几个问题: 1)MS DTC是否设置正确? 2)是否启用了防火墙?是否对DTC做了例外? 3)是否做了hosts映射?是否跨网域通信? 开发分布式事务,碰到一个错误“与基础事务管理器 ...
- XML基础概念
XML基础概念 一.什么是XML. 可扩展标记语言(EXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 二.XML特点 1 ...
- mysql 重命名表名
先创建一张表: -- 创建用户表 CREATE TABLE user10( id SMALLINT UNSIGNED KEY AUTO_INCREMENT, username ) NOT NULL U ...
- 修改tomcat浏览器地址栏图标
1.准备一张jpg格式的图片 2.去百度:ico图标在线制作(快速入口:http://www.faviconico.org/) 3.将生成的ico图标复制到tomcat的webapps下的ROOT项目 ...
- Codeforces Round #198 (Div. 1) B,C 动态规划
比赛时,开了大号去做,算了半天发现不会做A,囧.于是跑去看B,发现很水?于是很快敲完了,但是A不会,没敢交.于是去看C,一直找规律啊,后来总算调了出来,看了一下榜,发现还是算了吧,直接去睡觉了.第二天 ...
- VB.NET 小程序 2
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...
- 限额类费用报销单N+1原则
--添加通过自定义档案列表编码及档案编码查询主键 select bd_defdoc.pk_defdoc as defdoc --查询限额类费用类型主键 from bd_defdoc, bd_defdo ...
- AngularJS学习小结
在刚学习AngularJS的时候觉得好像挺简单的,看见老师每次用很少的代码就做出用源生代码或者JQuery要用多行代码才做出的效果的时候觉得好像思路很简单,也很好写就写出来了,但是等到我们自己做的时候 ...
- GridView九宫格菜单实现方式
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- 干货:Android 源码使用心得分享
我相信很多初学者会和我一样经常在网上去找Android开发源码,但是往往因为运行不起来非常的懊恼!在做爱开发网站的时候,收集App代码时就遇到了这种困难,我相信网络上面的源码大部分在发布前 ...