仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 458|回复: 9
打印 上一主题 下一主题

[学习教程] 发布一篇再谈线程:临盆者与消耗者

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:05:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。
场景形貌:
一个堆栈,临盆者在工场里临盆了产物后,将产物寄存到堆栈里,堆栈寄存数目无限,当满仓后,停止临盆,直到有消耗着将产物消耗后才持续临盆;消耗者从堆栈里提取产物,当堆栈空仓时,中断消耗产品,直到堆栈中有产物时,才持续消耗产物。
代码的完成(调剂线程sleep工夫能够完成临盆速率与消耗速率的分歧):
TestProduceAndConsumer.java
packagecom.nantian;

importjava.util.Random;

publicclassTestProduceAndConsumer{
   publicstaticvoidmain(String[]args){
       //创立一个工场对象
       ProductFactorypf=newProductFactory();
       //创立一个临盆者和一个消耗者,传送工场的援用,包管二者操纵的是统一个工场
       Producerp=newProducer(pf);
       Consumerc=newConsumer(pf);
       //启动两个线程
       p.start();
       c.start();
   }
}

//产物工场
classProductFactory{
   //product暗示堆栈
   privatechar[]product={,,,,};
   //flag标志产物数目
   privateintflag=0;

   //临盆产物
   publicsynchronizedvoidproduceProduct(charp)throwsInterruptedException{
       //判别产物是不是满仓,以便决意是不是持续临盆
       if(flag==product.length){
           this.wait();
       }
       //今世码实行到这里,必定不是满仓形态
       product[flag++]=p;
       //检察此时堆栈形态(这里不属于营业逻辑部分)
       System.out.print(p+"被临盆,以后堆栈形态:");
       for(chartmp:product){
           System.out.print(tmp);
       }
       System.out.println();
       //临盆办法完成,假如存在守候行列中的线程,应当叫醒
       this.notifyAll();
   }

   //消耗产物
   publicsynchronizedcharconsumeProduct()throwsInterruptedException{
       //判别堆栈是不是空仓,以便决意是不是消耗产物
       if(flag==0){
           this.wait();
       }
       //今世码实行到这里,必定不是空仓形态
       charp=product[--flag];product[flag]=;
       //检察此时堆栈形态(这里不属于营业逻辑部分)
       System.out.print(p+"被消耗,以后堆栈形态:");
       for(chartmp:product){
           System.out.print(tmp);
       }
       System.out.println();
       //消耗办法完成,假如存在守候行列中的线程,应当叫醒
       this.notifyAll();
       returnp;
   }
}

//临盆者
classProducerextendsThread{
   privateProductFactorypf=null;

   publicProducer(ProductFactorypf){
       this.pf=pf;
   }

   publicvoidrun(){
       //一共临盆20个产物
       for(inti=0;i<20;i++){
           //随机发生一个年夜写字母作为产物
           Randomr=newRandom();
           charp=(char)(r.nextInt(26)+A);
           try{
               //产物进库
               pf.produceProduct(p);
               //存心sleep,以便消耗线程无机会取得CPU工夫片,便利演示
               Thread.sleep(200);
           }catch(InterruptedExceptione){
               e.printStackTrace();
           }
       }
   }
}

//消耗者
classConsumerextendsThread{
   privateProductFactorypf=null;

   publicConsumer(ProductFactorypf){
       this.pf=pf;
   }

   publicvoidrun(){
       //一共消耗20个产物
       for(inti=0;i<20;i++){
           try{
               //产物出库
               pf.consumeProduct();
               //存心sleep,以便临盆线程无机会取得CPU工夫片,便利演示
               //sleep工夫略微错开,制止同时合作CPU工夫片
               Thread.sleep(300);
           }catch(InterruptedExceptione){
               e.printStackTrace();
           }
       }
   }
}

还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。
小魔女 该用户已被删除
沙发
发表于 2015-1-20 14:06:07 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
乐观 该用户已被删除
板凳
发表于 2015-1-29 08:41:33 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
爱飞 该用户已被删除
地板
发表于 2015-1-30 21:48:27 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
变相怪杰 该用户已被删除
5#
发表于 2015-2-2 17:23:19 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-8 02:34:40 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
第二个灵魂 该用户已被删除
7#
发表于 2015-2-24 02:09:34 | 只看该作者
是一种使用者不需花费很多时间学习的语言
小妖女 该用户已被删除
8#
发表于 2015-3-7 10:29:16 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
山那边是海 该用户已被删除
9#
发表于 2015-3-14 22:49:01 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
蒙在股里 该用户已被删除
10#
发表于 2015-3-21 14:50:30 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 22:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表