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

个人网站建设教学视频百度云盘wordpress 公众号登录

个人网站建设教学视频百度云盘,wordpress 公众号登录,个人网站推荐,公司域名备案网站名称作者要的是一个生产者生成#xff0c;接着必须有一个消费者消费#xff0c;那这不是需要单线程吗#xff1f;或者使用1个大小的阻塞队列。所以只谈论问题本身#xff0c;不谈论好不好。 具体代码#xff1a; Java代码 import java.util.concurrent.locks.Condition; i…作者要的是一个生产者生成接着必须有一个消费者消费那这不是需要单线程吗或者使用1个大小的阻塞队列。所以只谈论问题本身不谈论好不好。   具体代码 Java代码   import java.util.concurrent.locks.Condition;     import java.util.concurrent.locks.Lock;     import java.util.concurrent.locks.ReentrantLock;       //生产/消费者模式     public class Basket {         Lock lock  new ReentrantLock();           // 产生Condition对象         Condition produced  lock.newCondition();         Condition consumed  lock.newCondition();         boolean available  false;           public void produce() throws InterruptedException {             lock.lock();               try {                 if (available) {                     produced.await(); // 放弃lock进入睡眠                 }                   System.out.println(Apple produced.);                   available  true;                   consumed.signal(); // 发信号唤醒等待这个Condition的线程             } finally {                 lock.unlock();             }         }           public void consume() throws InterruptedException {             lock.lock();               try {                 if (!available) {                     consumed.await(); // 放弃lock进入睡眠                 }                   /* 吃苹果 */                System.out.println(Apple consumed.);                   available  false;                   produced.signal(); // 发信号唤醒等待这个Condition的线程             } finally {                 lock.unlock();             }         }     }   import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//生产/消费者模式public class Basket {Lock lock new ReentrantLock();// 产生Condition对象Condition produced lock.newCondition();Condition consumed lock.newCondition();boolean available false;public void produce() throws InterruptedException {lock.lock();try {if (available) {produced.await(); // 放弃lock进入睡眠}System.out.println(Apple produced.);available true;consumed.signal(); // 发信号唤醒等待这个Condition的线程} finally {lock.unlock();}}public void consume() throws InterruptedException {lock.lock();try {if (!available) {consumed.await(); // 放弃lock进入睡眠}/* 吃苹果 */System.out.println(Apple consumed.);available false;produced.signal(); // 发信号唤醒等待这个Condition的线程} finally {lock.unlock();}}}Java代码   import java.util.concurrent.ExecutorService;   import java.util.concurrent.Executors;     //测试用类   public class ConditionTester {         public static void main(String[] args) throws InterruptedException {           final Basket basket  new Basket();             // 定义一个producer           Runnable producer  new Runnable() {               public void run() {                   try {                       basket.produce();                   } catch (InterruptedException ex) {                       ex.printStackTrace();                   }               }           };             // 定义一个consumer           Runnable consumer  new Runnable() {               public void run() {                   try {                       basket.consume();                   } catch (InterruptedException ex) {                       ex.printStackTrace();                   }               }           };             // 各产生10个consumer和producer           ExecutorService service  Executors.newCachedThreadPool();             for (int i  0; i  4; i)               service.submit(consumer);             Thread.sleep(2000 * 2);             for (int i  0; i  4; i)               service.submit(producer);             service.shutdown();       }   }   import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;//测试用类 public class ConditionTester {public static void main(String[] args) throws InterruptedException {final Basket basket new Basket();// 定义一个producerRunnable producer new Runnable() {public void run() {try {basket.produce();} catch (InterruptedException ex) {ex.printStackTrace();}}};// 定义一个consumerRunnable consumer new Runnable() {public void run() {try {basket.consume();} catch (InterruptedException ex) {ex.printStackTrace();}}};// 各产生10个consumer和producerExecutorService service Executors.newCachedThreadPool();for (int i 0; i 4; i)service.submit(consumer);Thread.sleep(2000 * 2);for (int i 0; i 4; i)service.submit(producer);service.shutdown();} }原因分析 1、假设前面有2个producer(此时availabletrue) 1.1、一个在等待lock 1.2、一个await 2、consumer生成内容后availablefalseproduced.signal(); 最后lock.unlock(); 3.1、因为lock.unlock所以会触发一个lock获取到锁虽然signal也会触发等待这个条件的其他线程但是多线程大家都知道什么时候触发这是不确定的如果此时正好是[1.1]那么因为availablefalse执行完释放锁 3.2、produced.signal()所以会触发一个await的producer   解决方案 只要保证[3.1]还是需要await即可解决问题   所以加一个 AtomicInteger producedAwaitCounter new AtomicInteger(0); 统计当前等待的生产者如果当前availablefalse但已经有生产者生成了内容那么先等待消费者消费了再说               if (available || producedAwaitCounter.get() 0) {                 producedAwaitCounter.incrementAndGet();                 produced.await(); // 放弃lock进入睡眠                 producedAwaitCounter.decrementAndGet();             }   当然最简单的是使用自旋原理可以自己分析下             while (available) {                 produced.await(); // 放弃lock进入睡眠             }     Java代码   package com.sishuok.es.test;     import java.util.concurrent.atomic.AtomicInteger;   import java.util.concurrent.locks.Condition;     import java.util.concurrent.locks.Lock;     import java.util.concurrent.locks.ReentrantLock;       //生产/消费者模式     public class Basket {         Lock lock  new ReentrantLock(true);       // 产生Condition对象         Condition produced  lock.newCondition();         Condition consumed  lock.newCondition();         boolean available  false;       AtomicInteger producedAwaitCounter  new AtomicInteger(0);           public void produce() throws InterruptedException {             lock.lock();             try {                 if (available || producedAwaitCounter.get()  0) {                   producedAwaitCounter.incrementAndGet();                   produced.await(); // 放弃lock进入睡眠                   producedAwaitCounter.decrementAndGet();               }                 System.out.println(Apple produced.);                   available  true;                   consumed.signal(); // 发信号唤醒等待这个Condition的线程             } finally {               lock.unlock();           }         }           public void consume() throws InterruptedException {             lock.lock();               try {                 if (!available) {                   consumed.await(); // 放弃lock进入睡眠               }                 /* 吃苹果 */                System.out.println(Apple consumed.);                   available  false;                 produced.signal(); // 发信号唤醒等待这个Condition的线程           } finally {               lock.unlock();           }         }     }   package com.sishuok.es.test;import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//生产/消费者模式public class Basket {Lock lock new ReentrantLock(true);// 产生Condition对象Condition produced lock.newCondition();Condition consumed lock.newCondition();boolean available false;AtomicInteger producedAwaitCounter new AtomicInteger(0);public void produce() throws InterruptedException {lock.lock();try {if (available || producedAwaitCounter.get() 0) {producedAwaitCounter.incrementAndGet();produced.await(); // 放弃lock进入睡眠producedAwaitCounter.decrementAndGet();}System.out.println(Apple produced.);available true;consumed.signal(); // 发信号唤醒等待这个Condition的线程} finally {lock.unlock();}}public void consume() throws InterruptedException {lock.lock();try {if (!available) {consumed.await(); // 放弃lock进入睡眠}/* 吃苹果 */System.out.println(Apple consumed.);available false;produced.signal(); // 发信号唤醒等待这个Condition的线程} finally {lock.unlock();}}}
http://wiki.neutronadmin.com/news/42628/

相关文章:

  • 做网站前台开发学习汕头市网络科技有限公司
  • wamp可以做视频网站吗建设银行住房租赁品牌
  • 腾讯云 wordpress 主题电商seo是什么
  • 在线视频教育网站开发wordpress如何防止ddos
  • 杭州外贸网站建设公司申跃wordpress后台图
  • 企业网站备案在哪个部门网站中的搜索框怎么做
  • 抖音推广合作方式搜seo
  • 建设领域信用系统网站响应式 wordpress
  • 临沂企业网站开发官网建设网站费用要进固定资产吗
  • 龙采网站建设案例广州微网站建设平台
  • 做视频背景音乐网站南阳最新数据消息
  • 海南网站建设哪家不错wordpress 无图插件下载
  • 手机网站 切图英文网站制作费用
  • 站长工具查询网佳木斯做微网站
  • 北京网站建设主页asp网站下载
  • 方案模板网站深圳如何建立公司自己网站
  • 服装店网站模板聊城专业网站设计公司
  • 实用网站建设期末考试软文公司代写
  • 中国建设银行财付通网站网站免费模板资源
  • 结构设计网站宁波专业优化网站制作公司
  • 企业网站备案多少钱网络推广方案的工作安排
  • h5制作页面百度seo培训要多少钱
  • 精品网站建设费用 c磐石网络天门做网站
  • 一个公司网站的价格wordpress seo怎么做
  • wap网站价格关于英文网站建设的请示
  • 如何建设个人网站急招大龄工45到55岁
  • 服务器网站建设教程重庆网站的网络推广
  • 外贸网站怎么建设wordpress 搬家教程
  • 果洛电子商务网站建设wordpress 图床
  • 滨州网站建设制作系统网站建设及优化 赣icp