当前位置: 首页 > news >正文

建设网站的企业有哪些/soso搜搜

建设网站的企业有哪些,soso搜搜,建e网如何合并多个全景图,加工中心编程培训学校java实现生产者消费者问题 引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况…

 

java实现生产者消费者问题 

引言

  生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况:

生产者消费者图

  存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。互相等待,从而发生死锁。

JAVA解决线程模型的三种方式

  1、wait()和notify()

import java.util.LinkedList;public class ProducerConsumer {private LinkedList<Object> storeHouse = new LinkedList<Object>();private int MAX = 10;public ProducerConsumer() {}public void start() {new Producer().start();new Comsumer().start();}class Producer extends Thread {public void run() {while (true) {synchronized (storeHouse) {try {while (storeHouse.size() == MAX) {System.out.println("storeHouse is full , please wait");storeHouse.wait();}Object newOb = new Object();if (storeHouse.add(newOb)) {System.out.println("Producer put a Object to storeHouse");Thread.sleep((long) (Math.random() * 3000));storeHouse.notify();}} catch (InterruptedException ie) {System.out.println("producer is interrupted!");}}}}}class Comsumer extends Thread {public void run() {while (true) {synchronized (storeHouse) {try {while (storeHouse.size() == 0) {System.out.println("storeHouse is empty , please wait");storeHouse.wait();}storeHouse.removeLast();System.out.println("Comsumer get  a Object from storeHouse");Thread.sleep((long) (Math.random() * 3000));storeHouse.notify();} catch (InterruptedException ie) {System.out.println("Consumer is interrupted");}}}}}public static void main(String[] args) throws Exception {ProducerConsumer pc = new ProducerConsumer();pc.start();}
}

 

  2、await()和signal(),即线程锁的方式

package sort;import java.util.LinkedList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class ProducerConsumer {private LinkedList<Object> myList = new LinkedList<Object>();private int MAX = 10;private final Lock lock = new ReentrantLock();private final Condition full = lock.newCondition();private final Condition empty = lock.newCondition();public ProducerConsumer() {}public void start() {new Producer().start();new Consumer().start();}public static void main(String[] args) throws Exception {ProducerConsumer s2 = new ProducerConsumer();s2.start();}class Producer extends Thread {public void run() {while (true) {lock.lock();try {while (myList.size() == MAX) {System.out.println("warning: it's full!");full.await();}Object o = new Object();if (myList.add(o)) {System.out.println("Producer: " + o);empty.signal();}} catch (InterruptedException ie) {System.out.println("producer is interrupted!");} finally {lock.unlock();}}}}class Consumer extends Thread {public void run() {while (true) {lock.lock();try {while (myList.size() == 0) {System.out.println("warning: it's empty!");empty.await();}Object o = myList.removeLast();System.out.println("Consumer: " + o);full.signal();} catch (InterruptedException ie) {System.out.println("consumer is interrupted!");} finally {lock.unlock();}}}}}

 

  3、阻塞队列的方式

import java.util.concurrent.*;public class ProducerConsumer {// 建立一个阻塞队列private LinkedBlockingQueue<Object> queue = new LinkedBlockingQueue<Object>(10);public ProducerConsumer() {}public void start() {new Producer().start();new Consumer().start();}public static void main(String[] args) throws Exception {ProducerConsumer s3 = new ProducerConsumer();s3.start();}class Producer extends Thread {public void run() {while (true) {try {Object o = new Object();// 取出一个对象
                    queue.put(o);System.out.println("Producer: " + o);} catch (InterruptedException e) {System.out.println("producer is interrupted!");}// }
            }}}class Consumer extends Thread {public void run() {while (true) {try {// 取出一个对象Object o = queue.take();System.out.println("Consumer: " + o);} catch (InterruptedException e) {System.out.println("producer is interrupted!");}// }
            }}}}

结论

  三种方式原理一致,都是对独占空间加锁,阻塞和唤醒线程,第一种方式比较传统,第三种方式最简单,只需存储和取用,线程同步的操作交由LinkedBlockingQueue全权处理。

转载于:https://www.cnblogs.com/happyPawpaw/archive/2013/01/18/2865957.html

http://www.lbrq.cn/news/930529.html

相关文章:

  • 网站类产品怎么做竞品分析/优化课程体系
  • 做彩票网站犯法/香港疫情最新情况
  • 做网站要注册商标第几类/搜索引擎优化有哪些要点
  • 电子商务的网站建设要求步骤/app拉新渠道商
  • 电影网站如何建设/百度seo和sem
  • 什么网站有教做衣服视频的/临沂森拓网络科技有限公司
  • 城阳做网站公司/收录优美图片app
  • 培训视频网站/中国十大电商公司排名
  • 东庄水利建设公司网站/网络推广方案
  • 做香港台湾网站流量/谷歌商店安卓版下载
  • 网站开发的报价/百度快速收录3元一条
  • 建设网站 买了域名还要什么/b站推广引流最佳方法
  • 泉州网站建设价格/网络营销专业学什么课程
  • 一屏展示网站/武汉谷歌seo
  • 免费二维码制作/seo是付费还是免费推广
  • 网站的内链建设/域名注册费用
  • 南京500元做网站/如何开展网络营销活动
  • 在线文字图片生成器/百度爱采购优化软件
  • 个人网站建设需要备案吗/成人短期培训能学什么
  • 做网站找谁/刷关键词的平台
  • 小程序企业网站源码/北京seo排名服务
  • 专业网站建设设计装饰/保定网站建设方案优化
  • 国外哪些做问卷的网站/it培训学校
  • 自媒体人15种赚钱方法/宁波seo推荐
  • 驻马店重点项目建设网站/广告联盟app下载
  • 酒网站建设/重庆百度seo公司
  • 网站发的文章怎么做的/搜索引擎广告案例
  • 伪静态网站如何做/上海网络推广平台
  • 中石油网站建设/济南seo优化公司
  • 泰安平台公司/新余seo
  • 智能Agent场景实战指南 Day 26:Agent评估与性能优化
  • Python正则表达式精准匹配独立单词技巧
  • RabbitMQ 发送方确认的两大工具 (With Spring Boot)
  • 试用SAP BTP 02C:试用SAP HANA Schemas HDI Containers
  • SQLAlchemy 全方位指南:从入门到精通
  • 场景解决-列表项切换时同步到可视区域