简单生活 发表于 2015-1-18 11:05:09

发布一篇再谈线程:临盆者与消耗者

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=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=;
       //检察此时堆栈形态(这里不属于营业逻辑部分)
       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)产生生动活泼画面的语言

变相怪杰 发表于 2015-2-2 17:23:19

Java 编程语言的风格十分接近C、C++语言。

愤怒的大鸟 发表于 2015-2-8 02:34:40

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

第二个灵魂 发表于 2015-2-24 02:09:34

是一种使用者不需花费很多时间学习的语言

小妖女 发表于 2015-3-7 10:29:16

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

山那边是海 发表于 2015-3-14 22:49:01

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

蒙在股里 发表于 2015-3-21 14:50:30

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
页: [1]
查看完整版本: 发布一篇再谈线程:临盆者与消耗者