java-生产者消费者模式

经常会有公司叫我们手撕代码,比如网易,阿里,那我们是不是该掌握下呢。下面这段代码来自《现代操作系统》进程与线程P49页。

public class ProducerConsumer {public ProducerConsumer() { }private static final int N = 100;static Producer producer = new Producer();static Consumer consumer = new Consumer();static Monitor monitor = new Monitor();private static class Producer extends Thread {@Overridepublic void run() {//你生产的对象int item;while(true) {item = produce_item();monitor.insert(item);   }}public int produce_item() {//TODO你需要生产的对象}}private static class Consumer extends Thread {@Overridepublic void run() {//你打算消费的对象int item;while(true) {item = monitor.remove();consumer_item(item);    }}private int consumer_item(int item) {// TODO Auto-generated method stub}}private static class Monitor {//存放对象的容器LinkedList<Integer> buffer = new LinkedList<>();int count =0;public synchronized void insert(int item) {if(count == N) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}buffer.add(item);count++;if(count == 1) {notifyAll();}}public synchronized int remove() {if(count == 0) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}int val = buffer.getFirst();buffer.remove();count--;if(count == N-1) {notifyAll();    }return val;}public static void main(String[] args) {producer.start();consumer.start();}
}

转载于:https://www.cnblogs.com/loren-Yang/p/7466107.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yum查询已经安装mysql_通过yum安装mysql

在linux中安装数据库首选MySQL&#xff0c;Mysql数据库的第一个版本就是发行在Linux系统上&#xff0c;其他选择还可以有postgreSQL&#xff0c;oracle等在Linux上安装mysql数据库&#xff0c;我们可以去其官网上下载mysql数据库的rpm包&#xff0c;http://dev.mysql.com/downl…

koa2-cookie-session

node.js的path.extname方法使用   由于该方法属于path模块&#xff0c;使用前需要引入path模块&#xff08;var path require(“path”) &#xff09;   接收参数&#xff1a;   p path 路径 path.extname(index.html)// returns.htmlpath.extname(index.)// returns.pat…

从程序员角度看ELF

从程序员角度看ELF原文:《 ELF:From The Programmers Perspective》作者&#xff1a;Hongjiu Lu <mailto: hjlnynexst.com>NYNEX Science & Technology, Inc. 500 Westchester Avenue White Plains, NY 10604, USA 翻译&#xff1a;alert7 <mailto: alert721cn.co…

JAVA命令符找不到符号_[转]Java命令行编译文件时出现的错误,找不到符号或软件包不存在等...

标签(空格分隔)&#xff1a; Javajavascript习惯了eclipse的自动编译&#xff0c;Java命令行编译、执行文件只会最基础的部分&#xff0c;就是对单文件的编译和执行&#xff0c;并且不包含任何外部JAR包。但有时候你还非得用命令行&#xff0c;会碰到一些问题&#xff0c;博主这…

C#中POST数据和接收的几种方式

POST方式提交数据&#xff0c;一种众所周知的方式&#xff1a; html页面中使用form表单提交&#xff0c;接收方式&#xff0c;使用Request.Form[""]或Request.QueryString[""]来获取。 这里介绍另外一种POST方式和接收方式&#xff0c;就是将整个数据作为加…

java自动注入注解_Spring自动注解标签@Autowired不能注入xml配置的bean吗?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼配置service的xmlservice代码public class LoginServiceImpl extends BaseDaoServiceImpl implements LoginService {Overridepublic Map queryByUserName(String userName){IDao iDao super.getAppDao();return (Map)iDao.queryF…

一卡通vip充值消费线上oracle库服务器故障排查过程

上图是oracle体系总架构图今天突然公司所有终端pos机不能刷卡消费&#xff0c;财务室不能充值&#xff0c;一下很多电话打过来了&#xff0c;第一反应肯定数据库出问题了&#xff0c;登陆到数据库服务器&#xff0c;果然sqlplus连进去后就不断提示要求输入用户名&#xff0c;弹…

最详细的Linux下C编程

gcc 目 录 1. gcc 1. makefile写法 2. gcc_egcs使用 3. gdb使用 4. gcc常用选项对代码的影响 1. 一般情况 2. -O 编译选项 3. -O2 编译选项 4. -fomit-frame-pointer 编译选项 5. -fomit-frame-pointer…

sqlserver 存储过程 增加

CREATE PROCEDURE [dbo].[InsertMessage]( strTable varchar(50), --表名 strValues nvarchar(1000), --要插入的数据&#xff08;用英文逗号分隔&#xff09;,如果是字符串类型&#xff0c;需加单引号 only_field varchar(20)NULL, --唯一性字段(列名) only_valu…

java开发计算机考试服务器_2011计算机二级JAVA编程:取得服务器当前的各种具体时间...

取得服务器当前的各种具体时间/*** 取得服务器当前的各种具体时间* 回车&#xff1a;日期时间*/import java.util.*;public class GetNowDate{Calendar calendar null;public GetNowDate(){calendar Calendar.getInstance();calendar.setTime(new Date());}public int getYea…

(cljs/run-at (JSVM. :all) 细说函数)

前言 作为一门函数式编程语言&#xff0c;深入了解函数的定义和使用自然是十分重要的事情&#xff0c;下面我们一起来学习吧&#xff01; 3种基础定义方法 defn 定义语法 (defn name [params*]exprs*) 示例 (defn tap [ns x](println ns x)x) fn 定义语法 (fn name? [params*]…

Request的getHeader()和getParameter()的区别

区别是&#xff1a;一个是获得HTTP头信息,一个是获得表单参数值。转载于:https://www.cnblogs.com/pxffly/p/7460514.html

gcc中的内嵌汇编语言(Intel i386平台)

gcc中的内嵌汇编语言&#xff08;Inteli386平台&#xff09; 一.声明 虽然Linux的核心代码大部分是用C语言编写的&#xff0c;但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇编源程序中的&#xff0c;特别是Linux的启动代码部分&#xff1b…

数据库学习,树形结构的数据库表Schema设计方案

2019独角兽企业重金招聘Python工程师标准>>> 程序设计过程中&#xff0c;我们常常用树形结构来表征某些数据的关联关系&#xff0c;如企业上下级部门、栏目结构、商品分类等等&#xff0c;通常而言&#xff0c;这些树状结构需要借助于数据库完成持久化。然而目前的各…

[转载] 手工制作Win7 OEM版

只要往微软MSDN原版ISO的sources目录加个“$OEM$”文件夹&#xff0c;再删除sources下面的ei.cfg文件就可以了。 来源&#xff1a;http://zxkh19501.blog.163.com/blog/static/1237851792010629113427594/转载于:https://www.cnblogs.com/784040932/p/win7oem.html

mysql dbo_mysql-双重分组

我的表有两列&#xff1a;名称和等级.看起来像这样&#xff1a;NAME | GRADEAdam | 1Adam | 2Adam | 2Adam | 3Frank | 2Frank | 1现在,我想创建如下所示的视图&#xff1a;NAME | GRADE 1 | GRADE 2 | GRADE 3Adam | 1 | 2 | 1Frank | 1 | 1 | 0我写了这个&#xff1a;SELECT …

课堂作业整理三 (集合:list接口)

集合中 list的方法列表&#xff08;Arraylist和Linkedlist&#xff09; 方法名功能说明ArrayList()构造方法&#xff0c;用于创建一个空的数组列表add&#xff08;E&#xff0c;e&#xff09;将指定的元素添加到此列表的尾部get&#xff08;int index&#xff09;返回此列表中指…

LINUX系统移植(史上最全最细,强烈推荐)

Linux系统移植 目 录 第一部分 前言...................................................................................................................................8 1 硬件环境................................................................................…

The serializable class XXX does not declare a static final serialVersionUID field of type long的警告...

原文: http://blog.csdn.net/ultrakang/article/details/41820543转载于:https://www.cnblogs.com/Baronboy/p/7465508.html

Ubuntu17.04 之 systemd 设置开机启动

Ubuntu从16.04开始不再使用 initd 管理系统&#xff0c;改用 systemd。 和 Centos 一样&#xff0c;升级到 Centos7 之后使用 systemd 替代 init.d 为了像以前一样&#xff0c;在/etc/rc.local中设置开机启动程序&#xff0c;需要以下几步&#xff1a; 1、链接文件 systemd 默…