??xml version="1.0" encoding="utf-8" standalone="yes"?>国产二区一区,日韩中文一区二区,日韩08精品http://www.aygfsteel.com/javanetphp/javaQnetQphp技术研I神?/description>zh-cnTue, 17 Jun 2025 01:38:59 GMTTue, 17 Jun 2025 01:38:59 GMT60让Java代码跑得更快http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386110.htmlIT童IT童Thu, 23 Aug 2012 06:42:00 GMThttp://www.aygfsteel.com/javanetphp/archive/2012/08/23/386110.htmlhttp://www.aygfsteel.com/javanetphp/comments/386110.htmlhttp://www.aygfsteel.com/javanetphp/archive/2012/08/23/386110.html#Feedback0http://www.aygfsteel.com/javanetphp/comments/commentRss/386110.htmlhttp://www.aygfsteel.com/javanetphp/services/trackbacks/386110.html本文单介l一下在写代码过E中用到的一些让JAVA代码更高效的技巧?/p>

1,一些系l资源放在池?如数据库q接,U程{?在standalone的应用中,数据库连接池可以使用一些开源的q接池实?如C3P0,proxool和DBCP{?在运行在容器中的应用q可以用服务器提供的DataSource.U程池可以用JDK本n提供的java.util.concurrent.ExecutorService.

  1. import java.util.concurrent.Executors;  
  2. import java.util.concurrent.ExecutorService;  
  3. public class JavaThreadPool {  
  4.     public static void main(String[] args) {  
  5.     ExecutorService pool = Executors.newFixedThreadPool(2);  
  6.       
  7.     Thread t1 = new MyThread();  
  8.     Thread t2 = new MyThread();  
  9.     Thread t3 = new MyThread();  
  10.     Thread t4 = new MyThread();  
  11.     Thread t5 = new MyThread();  
  12.  
  13.     pool.execute(t1);  
  14.     pool.execute(t2);  
  15.     pool.execute(t3);  
  16.     pool.execute(t4);  
  17.  
  18.     pool.shutdown();  
  19.     }  
  20. }  
  21.  
  22. class MyThread extends Thread {  
  23.     public void run() {  
  24.     System.out.println(Thread.currentThread().getName() + "running....");  
  25.     }  
  26. }  

2,减少|络开销,在和数据库或者远E服务交互的时?量多ơ调用合q到一ơ调用中?/p>

3,经常访问的外部资源cache到内存中,单的可以使用static的hashmap在应用启动的时候加?也可以用一些开源的cache框架,如OSCache和Ehcache{?和资源的同步可以考虑定期轮询和外部资源更新时候主动通知.或者在自己写的代码中留出接?命o方式或者界面方?共手动同步?/p>

4,优化IO操作,JAVA操作文g的时候分InputStream and OutputStream,Reader and Writer两类,stream的方式要?后者主要是Z操作字符而用?在字W仅仅是ASCII的时候可以用stream的方式提高效?JDK1.4之后的nio比io的效率更好?a >java教程下蝲

  1. OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/temp/test.txt")));              
  2. out.write("abcde".getBytes());        
  3. out.flush();  
  4. out.close(); 

利用BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter减少对磁盘的直接讉Kơ数?/p>

  1. FileReader fr = new FileReader(f);  
  2. BufferedReader br = new BufferedReader(fr);  
  3. while (br.readLine() != null) count++; 

5不要频繁的new对象,对于在整个应用中只需要存在一个实例的cM用单例模?对于String的连接操?使用StringBuffer或者StringBuilder.对于utilitycd的类通过静态方法来讉K?/p>

6,避免使用错误的方?如Exception可以控制Ҏ(gu)推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用instanceof做条件判?量使用比的条g判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好?/p>

7,Ҏ(gu)能的考虑要在pȝ分析和设计之初就要考虑?/p>

M,一个系l运行时的性能,无非是从CPU,Memory和IOq三个主要方面来考虑优化.减少不必要的CPU消?减少不必要的IO操作,增加Memory利用效率?/p>

IT童 2012-08-23 14:42 发表评论
]]>
Java高ƈ发:静态页面生成方?/title><link>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386109.html</link><dc:creator>IT童</dc:creator><author>IT童</author><pubDate>Thu, 23 Aug 2012 06:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386109.html</guid><wfw:comment>http://www.aygfsteel.com/javanetphp/comments/386109.html</wfw:comment><comments>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/javanetphp/comments/commentRss/386109.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/javanetphp/services/trackbacks/386109.html</trackback:ping><description><![CDATA[<p>提升|站性能的方式有很多Q例如有效的使用~存Q生成静态页面等{。今天要说的是生成静态页面的方式。这个也是我q期一直在搞的一个问题,q期在做使用html + servlet做个人网站,Z么是q?个东西呢Q?/p> <p>1、直接用servlet是ؓ了保证网站能以最快的速度执行命o个hL觉像Struts hibernate spring之类的虽然方便但是效能带来的损耗不太能接收</p> <p>2、用html同样是ؓ了保证最快的反应速度Q毕竟html 比jsp了一层服务器执行。速度上要快的?/p> <p><strong>一、在q里要先说一下什么是面静态化Q?/strong></p> <p>单的_我们如果讉K一个链?,服务器对应的模块会处理这个请求,转到对应的jsp界面Q最后生成我们想要看到的数据。这其中的缺Ҏ(gu)显而易见的Q因为每ơ请求服务器都会q行处理Q如果有太多的高q发hQ那么就会加重应用服务器的压力,弄不好就把服务器 搞down 掉了。那么如何去避免呢?如果我们把对 test.do h后的l果保存成一?html 文gQ然后每ơ用户都去访?,q样应用服务器的压力不就减少了?</p> <p>那么静态页面从哪里来呢QM能让我们每个面都手动处理吧Q这里就牉|到我们要讲解的内容了Q静态页面生成方?#8230; 我们需要的是自动的生成静态页面,当用戯?,会自动生?test.html ,然后昄l用戗?/p> <p><strong>二、下面我们在单介l一下要x握页面静态化Ҏ(gu)应该掌握的知识点</strong></p> <p>1?基础- URL Rewrite</p> <p>什么是 URL Rewrite ?? URL 重写。用一个简单的例子来说明问题:输入|址 ,但是实际上访问的却是 abc.com/test.action,那我们就可以?URL 被重写了。这Ҏ(gu)术应用广泛,有许多开源的工具可以实现q个功能?span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US"><a ><span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US">java</span><span style="font-family: 宋体; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: zh-CN">?sh)子书免费下?/span></a></span>2?基础- Servlet web.xml</p> <p>如果你还不知?web.xml 中一个请求和一?servlet 是如何匹配到一LQ那么请搜烦一?servlet 的文档。这可不是ؕ说呀Q有很多人就认ؓ /xyz/*.do q样的匹配方式能有效?/p> <p>如果你还不知道怎么~写一?servlet ,那么h索一下如何编?servlet.q可不是说笑呀Q在各种集成工具漫天飞舞的今天,很多人都不会M零编写一?servlet了?/p> <p><strong>三、基本的Ҏ(gu)介绍</strong></p> <p style="text-align: center"><img class="fit-image" alt="" src="http://images.51cto.com/files/uploadimg/20120719/1102050.jpg" /></p> <p>其中Q对?URL Rewriter的部分,可以使用收费或者开源的工具来实玎ͼ如果 url不是特别的复杂,可以考虑?servlet 中实玎ͼ那么是下面q个样子Q?br /> </p> <p style="text-align: center"><img class="fit-image" alt="" src="http://images.51cto.com/files/uploadimg/20120719/1102051.jpg" width="498" /></p><img src ="http://www.aygfsteel.com/javanetphp/aggbug/386109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/javanetphp/" target="_blank">IT童</a> 2012-08-23 14:41 <a href="http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>公司的Java框架应具备的通用功能http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386108.htmlIT童IT童Thu, 23 Aug 2012 06:40:00 GMThttp://www.aygfsteel.com/javanetphp/archive/2012/08/23/386108.htmlhttp://www.aygfsteel.com/javanetphp/comments/386108.htmlhttp://www.aygfsteel.com/javanetphp/archive/2012/08/23/386108.html#Feedback1http://www.aygfsteel.com/javanetphp/comments/commentRss/386108.htmlhttp://www.aygfsteel.com/javanetphp/services/trackbacks/386108.html以前在学校的时候自׃为是不是每个做JAVA开发的公司每次做项目的时候都要搭Z个SSH框架呢,工作之后才发现每个公叔R有自q一套框Ӟ要不是在SSH基础上,要不是在SSI基础上进行了W合自己公司需求的装Qƈ且随着自己公司的框架被应用到各个实际系l的q程中,q个框架会越来越成熟Q会使该公司的开发效率越来越高?/p>

Ҏ(gu)W者接触过的几个公司的框架Q笔者发现要惛_现高效的开发,每个公司的框架应该具备如下的特点Q?/p>

1.h灉|的分功能?/strong>

分页功能是每个项目中必须要实现的功能Q而恰恰这个功能是比较Ҏ(gu)费力的,如果在框架中实现q一功能Q将在每个项目中大大减少分页的重复性工作?/p>

2.可以方便的实现文件的上传与下载、数据的导入和导出的功能?/strong>

文g的上传于下蝲、数据的导入和导出在大部门项目中也会遇到Q但是这两个功能可能会因为项目的不同D实现上有一点区别,我们框架中要做的是应该抽出其中共有的东西,定义为抽象的东西Q以便不同的目、不同的需求都能很Ҏ(gu)的实现该功能?span style="font-family: 宋体; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: zh-CN">成都java培训机构
3.方便的事务管理功能?/strong>

事务理一般来说都定义在业务逻辑层。我们框架中应该实现对业务逻辑对象事务的简单配|甚x雉|。笔者接触过的两个框架中Q一个需要在配置完一个业务逻辑对象Ӟ在事务管理的配置文g中加上一句简单的配置卛_Q另一个是框架中实C几个基本的业务逻辑对象Qƈ对这几个对象实现了事务管理的配置Q开发的时候定义的业务逻辑对象都是l承自这几个基本对象Q也qM事务理的配|?/p>

4.h异常处理框架?/strong>

基本上每个项目的异常处理都应该可以用公司的框架定义的异常处理框Ӟq不会因为项目的不同而要求的异常处理也不一栗?/p>

5.h自己的一套页面组件?/strong>

目开发都是团队的开发,要想保证每个开发h员的界面风格l一Q最好的办法是定义一套公司自q面l徏。这h能保证开发效率,也能做到界面的统一。freemark是不错的选择Q其支持自定义宏Q公司框架中可以定义一套自q面l徏宏,供开发h员调用即可?


 

6.h数据校验框架?/strong>

每个目在数据校验时都可能会用到大量的正则表辑ּQ那么在公司的框架中这些正则表辑ּ装hQ提供统一的调用接口将是不错的选择?/p>

7.单的实现菜单的配|?/strong>

一个好的框架应该提供对菜单、二U菜单等的简单配|、管理。还是上文提到的两个框架Q一个是通过XML配置文g实现了对pȝ中一U菜单、二U菜单、三U菜单的理Q而另个框架要实现相同的需求却要在数据库中q行J琐的配|,昄W一个框架的实现Ҏ(gu)更可取、更高效?/p>

IT童 2012-08-23 14:40 发表评论
]]>
Java中用内存映射处理大文?/title><link>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386107.html</link><dc:creator>IT童</dc:creator><author>IT童</author><pubDate>Thu, 23 Aug 2012 06:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386107.html</guid><wfw:comment>http://www.aygfsteel.com/javanetphp/comments/386107.html</wfw:comment><comments>http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/javanetphp/comments/commentRss/386107.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/javanetphp/services/trackbacks/386107.html</trackback:ping><description><![CDATA[<p>在处理大文gӞ如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频J的d操作Q都导致进E因频繁d外存而降低速度.如下Z个对比实验?/p> <ol class="dp-j"><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">package</span><span> test;  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.BufferedInputStream;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.io.FileInputStream;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.FileNotFoundException;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.io.IOException;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.RandomAccessFile;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.nio.MappedByteBuffer;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.nio.channels.FileChannel;  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">class</span><span> Test {  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span>      </span></li><li><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> main(String[] args) {  </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            FileInputStream fis=</span><span id="wmqeeuq" class="keyword">new</span><span> FileInputStream(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="keyword">while</span><span>((n=fis.read())>=</span><span id="wmqeeuq" class="number">0</span><span>){  </span></li><li><span>                    sum+=n;  </span></li><li id="wmqeeuq" class="alt"><span>                }  </span></li><li><span>            } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>                e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>            }  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li id="wmqeeuq" class="alt"><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>            e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>        }  </span></li><li><span>          </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            FileInputStream fis=</span><span id="wmqeeuq" class="keyword">new</span><span> FileInputStream(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            BufferedInputStream bis=</span><span id="wmqeeuq" class="keyword">new</span><span> BufferedInputStream(fis);  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>                </span><span id="wmqeeuq" class="keyword">while</span><span>((n=bis.read())>=</span><span id="wmqeeuq" class="number">0</span><span>){  </span></li><li id="wmqeeuq" class="alt"><span>                    sum+=n;  </span></li><li><span>                }  </span></li><li id="wmqeeuq" class="alt"><span>            } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li><span>                </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>                e.printStackTrace();  </span></li><li><span>            }  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li id="wmqeeuq" class="alt"><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>            e.printStackTrace();  </span></li><li><span>        }  </span></li><li id="wmqeeuq" class="alt"><span>          </span></li><li><span>        MappedByteBuffer buffer=</span><span id="wmqeeuq" class="keyword">null</span><span>;  </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            buffer=</span><span id="wmqeeuq" class="keyword">new</span><span> RandomAccessFile(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>,</span><span id="wmqeeuq" class="string">"rw"</span><span>).getChannel().map(FileChannel.MapMode.READ_WRITE, </span><span id="wmqeeuq" class="number">0</span><span>, </span><span id="wmqeeuq" class="number">1253244</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">for</span><span>(</span><span id="wmqeeuq" class="keyword">int</span><span> i=</span><span id="wmqeeuq" class="number">0</span><span>;i<</span><span id="wmqeeuq" class="number">1253244</span><span>;i++){  </span></li><li id="wmqeeuq" class="alt"><span>                n=</span><span id="wmqeeuq" class="number">0x000000ff</span><span>&buffer.get(i);  </span></li><li><span>                sum+=n;  </span></li><li id="wmqeeuq" class="alt"><span>            }  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li id="wmqeeuq" class="alt"><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>            e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>            e.printStackTrace();  </span></li><li><span>        }  </span></li><li id="wmqeeuq" class="alt"><span> </span></li><li><span>    }  </span></li><li id="wmqeeuq" class="alt"><span> </span></li><li><span>}  </span></li></ol><pre><span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US"><a ><pre><span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US">java</span><span style="font-family: 宋体; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: zh-CN">基础教程</span></pre></a></span>试文gZ个大ؓ1253244字节的文件。测试结果:</pre><pre><ol class="dp-xml"><li id="wmqeeuq" class="alt"><span>sum:220152087 time:1464  </span></li><li><span>sum:220152087 time:72  </span></li><li id="wmqeeuq" class="alt"><span>sum:220152087 time:25 </span></li></ol></pre> <p>说明L据无误。删d中的数据处理部分?/p><pre><ol class="dp-j"><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">package</span><span> test;  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.BufferedInputStream;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.io.FileInputStream;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.FileNotFoundException;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.io.IOException;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.io.RandomAccessFile;  </span></li><li><span id="wmqeeuq" class="keyword">import</span><span> java.nio.MappedByteBuffer;  </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> java.nio.channels.FileChannel;  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">class</span><span> Test {  </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span>      </span></li><li><span>    </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> main(String[] args) {  </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            FileInputStream fis=</span><span id="wmqeeuq" class="keyword">new</span><span> FileInputStream(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="keyword">while</span><span>((n=fis.read())>=</span><span id="wmqeeuq" class="number">0</span><span>){  </span></li><li><span>                    </span><span id="wmqeeuq" class="comment">//sum+=n; </span><span> </span></li><li id="wmqeeuq" class="alt"><span>                }  </span></li><li><span>            } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>                e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>            }  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li id="wmqeeuq" class="alt"><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>            e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>        }  </span></li><li><span>          </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            FileInputStream fis=</span><span id="wmqeeuq" class="keyword">new</span><span> FileInputStream(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            BufferedInputStream bis=</span><span id="wmqeeuq" class="keyword">new</span><span> BufferedInputStream(fis);  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>                </span><span id="wmqeeuq" class="keyword">while</span><span>((n=bis.read())>=</span><span id="wmqeeuq" class="number">0</span><span>){  </span></li><li id="wmqeeuq" class="alt"><span>                    </span><span id="wmqeeuq" class="comment">//sum+=n; </span><span> </span></li><li><span>                }  </span></li><li id="wmqeeuq" class="alt"><span>            } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li><span>                </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>                e.printStackTrace();  </span></li><li><span>            }  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li id="wmqeeuq" class="alt"><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>            e.printStackTrace();  </span></li><li><span>        }  </span></li><li id="wmqeeuq" class="alt"><span>          </span></li><li><span>        MappedByteBuffer buffer=</span><span id="wmqeeuq" class="keyword">null</span><span>;  </span></li><li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">try</span><span> {  </span></li><li><span>            buffer=</span><span id="wmqeeuq" class="keyword">new</span><span> RandomAccessFile(</span><span id="wmqeeuq" class="string">"/home/tobacco/test/res.txt"</span><span>,</span><span id="wmqeeuq" class="string">"rw"</span><span>).getChannel().map(FileChannel.MapMode.READ_WRITE, </span><span id="wmqeeuq" class="number">0</span><span>, </span><span id="wmqeeuq" class="number">1253244</span><span>);  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> sum=</span><span id="wmqeeuq" class="number">0</span><span>;  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">int</span><span> n;  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t1=System.currentTimeMillis();  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">for</span><span>(</span><span id="wmqeeuq" class="keyword">int</span><span> i=</span><span id="wmqeeuq" class="number">0</span><span>;i<</span><span id="wmqeeuq" class="number">1253244</span><span>;i++){  </span></li><li id="wmqeeuq" class="alt"><span>                </span><span id="wmqeeuq" class="comment">//n=0x000000ff&buffer.get(i); </span><span> </span></li><li><span>                </span><span id="wmqeeuq" class="comment">//sum+=n; </span><span> </span></li><li id="wmqeeuq" class="alt"><span>            }  </span></li><li><span>            </span><span id="wmqeeuq" class="keyword">long</span><span> t=System.currentTimeMillis()-t1;  </span></li><li id="wmqeeuq" class="alt"><span>            System.out.println(</span><span id="wmqeeuq" class="string">"sum:"</span><span>+sum+</span><span id="wmqeeuq" class="string">"  time:"</span><span>+t);  </span></li><li><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (FileNotFoundException e) {  </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li><span>            e.printStackTrace();  </span></li><li id="wmqeeuq" class="alt"><span>        } </span><span id="wmqeeuq" class="keyword">catch</span><span> (IOException e) {  </span></li><li><span>            </span><span id="wmqeeuq" class="comment">// TODO Auto-generated catch block </span><span> </span></li><li id="wmqeeuq" class="alt"><span>            e.printStackTrace();  </span></li><li><span>        }  </span></li><li id="wmqeeuq" class="alt"><span> </span></li><li><span>    }  </span></li><li id="wmqeeuq" class="alt"><span> </span></li><li><span>} </span></li></ol></pre> <p>试l果Q?/p><pre><ol class="dp-xml"><li id="wmqeeuq" class="alt"><span>sum:0 time:1458  </span></li><li><span>sum:0 time:67  </span></li><li id="wmqeeuq" class="alt"><span>sum:0 time:8 </span></li></ol></pre> <p>由此可见Q将文g部分或者全部映到内存后进行读写,速度提高很多?/p> <p>q是因ؓ内存映射文g首先外存上的文件映到内存中的一块连l区域,被当成一个字节数l进行处理,d操作直接对内存进行操作,而后再将内存区域重新映射到外存文Ӟq就节省了中间频J的对外存进行读写的旉Q大大降低了d旉?/p><img src ="http://www.aygfsteel.com/javanetphp/aggbug/386107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/javanetphp/" target="_blank">IT童</a> 2012-08-23 14:37 <a href="http://www.aygfsteel.com/javanetphp/archive/2012/08/23/386107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈Java中的几种随机?/title><link>http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385998.html</link><dc:creator>IT童</dc:creator><author>IT童</author><pubDate>Wed, 22 Aug 2012 02:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385998.html</guid><wfw:comment>http://www.aygfsteel.com/javanetphp/comments/385998.html</wfw:comment><comments>http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/javanetphp/comments/commentRss/385998.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/javanetphp/services/trackbacks/385998.html</trackback:ping><description><![CDATA[<span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/24px Helvetica, Tahoma, Arial, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"> <div style="padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1.5em; padding-left: 10px; padding-right: 10px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="summary"><strong>摘要Q?/strong>众所周知Q随机数是Q何一U编E语a最基本的特征之一。而生成随机数的基本方式也是相同的Q生一??之间的随机数。看似简单,但有时我们也会忽略了一些有的功能?/div> <div style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 30px; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px" class="con news_content"> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">众所周知Q随机数是Q何一U编E语a最基本的特征之一。而生成随机数的基本方式也是相同的Q生一??之间的随机数。看似简单,但有时我们也会忽略了一些有的功能?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong>我们从书本上学到什么?</strong></p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong></strong>最明显的,也是直观的方式,在Java中生成随机数只要单的调用Q?/p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">java.lang.Math.random() </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">在所有其他语a中,生成随机数就像是使用Math工具c,如abs, pow, floor, sqrt和其他数学函数。大多数人通过书籍、教E和评来了解这个类。一个简单的例子Q从0.0?.0之间可以生成一个双_ֺ点数。那么通过上面的信息,开发h员要产生0.0?0.0之间的双_ֺ点Cq样来写Q?/p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">Math.random() * 10 </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">而??0之间的整敎ͼ则会写成Q?/p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">Math.round(Math.random() * 10) </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong>q阶</strong></p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong></strong>通过阅读Math.random()的源码,或者干脆利用IDE的自动完成功能,开发h员可以很Ҏ(gu)发现Qjava.lang.Math.random()使用一个内部的随机生成对象 - 一个很强大的对象可以灵zȝ随机产生Q布?yu)倹{所有数字类型,甚至是高斯分布。例如:</p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">new java.util.Random().nextInt(10) </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">它有一个缺点,是它是一个对象。它的方法必L通过一个实例来调用Q这意味着必须先调用它的构造函数。如果在内存充的情况下Q像上面的表辑ּ是可以接受的Q但内存不Ӟ׃带来问题?span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US"><a ><span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US">java</span><span style="font-family: 宋体; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: zh-CN">教程下蝲</span></a></span>一个简单的解决Ҏ(gu)Q可以避免每ơ需要生成一个随机数时创Z个新实例Q那是使用一个静态类。猜你可能想Cjava.lang.MathQ很好,我们是改良java.lang.Math的初始化。虽然这个工E量低,但你也要做一些简单的单元试来确保其不会出错?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">假设E序需要生成一个随机数来存储,问题又来了。比如有旉要操作或保护U子(seed)Q一个内部数用来存储状态和计算下一个随机数。在q些Ҏ(gu)情况下,q随机生成对象是不合适的?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong>q发</strong></p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong></strong>在Java EE多线E应用程序的环境中,随机生成实例对象仍然可以被存储在cL其他实现c,作ؓ一个静态属性。幸q的是,java.util.Random是线E安全的Q所以不存在多个U程调用会破坏种?seed)的风险?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">另一个值得考虑的是多线Ejava.lang.ThreadLocal的实例。偷懒的做法是通过Java本nAPI实现单一实例Q当然你也可以确保每一个线E都有自q一个实例对象?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">虽然Java没有提供一个很好的Ҏ(gu)来管理java.util.Random的单一实例。但是,期待已久的Java 7提供了一U新的方式来产生随机敎ͼ</p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">java.util.concurrent.ThreadLocalRandom.current().nextInt(10) </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">q个新的APIl合了其他两U方法的优点Q单一实例/静态访问,像Math.random()一LzRThreadLocalRandom也比其他M处理高ƈ发的Ҏ(gu)要更快?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px"><strong>l验</strong></p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">Chris Marasti-Georg 指出:</p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">Math.round(Math.random() * 10) </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">使分布不qQ例如:0.0 - 0.499999四舍五入ؓ0Q?.5?.499999四舍五入ؓ1。那么如何用旧式语法来实现正确的均衡分布,如下Q?/p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">Math.floor(Math.random() * 11Q?nbsp;</span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">q运的是Q如果我们用java.util.Random或java.util.concurrent.ThreadLocalRandom׃用担心上q问题了?/p> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">Java实战目里面介绍了一些不正确使用java.util.Random API的危実뀂这个教训告诉我们不要用:</p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">Math.abs(rnd.nextInt())%n </span></span></li></ol></pre> <p style="padding-bottom: 0px; list-style-type: none; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 0px">而用:</p><pre style="padding-bottom: 0px; overflow-x: hidden; overflow-y: hidden; background-color: rgb(247,247,247); list-style-type: none; margin: 0px 0px 1em; padding-left: 0px; width: 613px; padding-right: 0px; white-space: pre-wrap; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial"><ol style="border-left: rgb(20,107,0) 3px solid; padding-bottom: 5px; background-color: rgb(247,247,247); list-style-type: decimal; margin: 0px 0px 1px 3em; padding-left: 0px; padding-right: 0px; text-decoration: none; padding-top: 5px; background-origin: initial; background-clip: initial" class="dp-xml"><li style="padding-bottom: 0px; background-color: rgb(255,255,255); list-style-type: decimal; margin: 0px; padding-left: 10px; padding-right: 3px; text-decoration: none; padding-top: 0px; background-origin: initial; background-clip: initial" class="alt"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial"><span style="background-color: rgb(255,255,255); background-origin: initial; background-clip: initial">rnd.nextInt(n) </span></span></li></ol></pre></div></span><img src ="http://www.aygfsteel.com/javanetphp/aggbug/385998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/javanetphp/" target="_blank">IT童</a> 2012-08-22 10:19 <a href="http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 8的重要新Ҏ(gu)以及未来版本的发展规划http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385996.htmlIT童IT童Wed, 22 Aug 2012 02:17:00 GMThttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385996.htmlhttp://www.aygfsteel.com/javanetphp/comments/385996.htmlhttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385996.html#Feedback0http://www.aygfsteel.com/javanetphp/comments/commentRss/385996.htmlhttp://www.aygfsteel.com/javanetphp/services/trackbacks/385996.html
摘要Q?/strong>我们一直在期待着Java 8的新功能Q虽然很大一部分是对Java 7的扩展,发布旉也一推再推。但如今甲骨文终于承诺:新版本将是彻底的变革而不仅仅是Java 7的扩展。那Java 8到底是什么样的呢Q?/div>

我们一直在期待着Java 8的新功能Q虽然很大一部分是对Java 7的扩展,发布旉也一推再推。但如今甲骨文终于承诺:新版本将是彻底的变革而不仅仅是Java 7的扩展。那Java 8到底是什么样的呢Q?/p>

甲骨文的JavaL构师马克•L德在2011qJavaOne大会上ؓ大家透露了Java 8的新功能Q同时也谈到了一些关于Java 9的计划。他_Java 7未能实现五个关键的功能是非常遗憾的一件事Q而且另外两个功能Z配合发布日期也只好作|。马克认为,Java 7的更新是非常重要的,他还暗示QJava 8从Ҏ(gu)上改变编E语a的功能。看完下面的介绍你也怼明白马克的说法不是天方夜谭?/p>

Java 8包含两个主要目Q?/strong>

1. Lambda

?a style="color: rgb(0,102,204); cursor: pointer; text-decoration: none" target="_blank">Lambda目中,多核处理器下的Java~程更高效QLambda表达式可以帮助开发h员提高效率,更好地利用多核处理器。Lambda目q包括一个新的处理系l,该系l允许要求代码徏模的~程模式作ؓ数据。新功能一览:

  • Lambda表达式的q用
  • 扩展目标cd?/li>
  • Ҏ(gu)和构造函数参?/li>
  • 默认Ҏ(gu)

2. Jigsaw

Jigsaw目的目标是创徏一个实用的方式来在JDK上设计和实施一个模块系l,然后该pȝ应用于JDK本n?strong>其关键是令大块的代码更易于管理,q促q应用和大型q算的代码重用。Jigsaw目q带来了许多新的表单功能Q涉及封装、重构、版本和模块集成?/strong>

此外Q除了这两个目QJava 8 q增加改q了一些其他语a功能Q如升核心Java库q行q算的表达更Ҏ(gu)Q虚拟扩展方法允许对接口增加Ҏ(gu)Qؓ默认实现指定参考;增加新的日期/旉APIQ同时支持传感器Q增加代码的部v选项?/strong>

Java 9?0的发展规?/strong>

甲骨文对Java 8 的前景很是看好,q已l开始讨论Java 9发展的关键领域。比如加入一个self-tuning JVMQ提高本地集成和大规模多核的可扩展性;通过新的元对象协议和资源理器ؓ云应用添加跨语言支持?span style="font-family: Calibri; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: en-US">java?sh)子书免费下?/span>

甲骨文也表示QJava9?0加入大数据、多语言的互操作性、云计算和移动,预期分别?015q和2017q发布?/strong>而关于Java开发工具包QJDKQ?0以及之后的版本也正在讨论中,比如使Java语言面向对象QŞ成一个统一的类型系l,所有原语都{换ؓ对象和方法?/p>

随着使用人数的增加,Java正逐渐成ؓ最常用的编E语aQo每个使用者都满意成了它的目标?strong>甲骨文认为Java在将来会成ؓ开发者们首选的~程语言Q因为它可以实现的东西正好符合了开发者们的期望?nbsp;



IT童 2012-08-22 10:17 发表评论
]]>java基础学习--排序法 http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385994.htmlIT童IT童Wed, 22 Aug 2012 02:15:00 GMThttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385994.htmlhttp://www.aygfsteel.com/javanetphp/comments/385994.htmlhttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385994.html#Feedback0http://www.aygfsteel.com/javanetphp/comments/commentRss/385994.htmlhttp://www.aygfsteel.com/javanetphp/services/trackbacks/385994.html选择排序Q让W一个跟后面的每个元素比较,如果大于则交换量元素的位|,W二ơ则让第二个元素跟后面的元素一ơ比?因ؓW一个元素的位置已经定了)Q一ơ类推直到最后一个元?
代码:
public class TestChoose {
public static void main(String[] args) {
int[] arr = {8,3,67,43,21,56,78};
choose(arr);
printArray(arr);
}
public static void choose(int[] arr){
int temp = 0;
for(int i = 0;i < arr.length;i ++){
for(int j = i+1;j < arr.length;j ++){
if(arr[i]>arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
public static void printArray(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
}
当if(arr[i]>arr[j])Ӟ为升序排?/div>
if(arr[i]<arr[j])Ӟ为降序排?/div>
冒排序:每次盔R的两个元素的相比较,每次相比大的攑֐面,每次比完以后最大的元素q?了,然后在从W一个元素开始,每相?c)两个元素之间的比?a >成都java培训机构
代码:
public static void bubbleSort(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length -i -1; j++) {
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
对上面中arr.length-x-1说明 
-x  是ؓ了每ơ少比一ơ,每次比完以后最后的那个元素位值就定了,所以没有必要再?span style="font-family: 宋体; color: black; font-size: 11pt; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 13; language: zh-CN">成都java培训机构
-1  是防止数l越界,当我i=0的事Qj最后一ơ就是arr.lengthQ如果不?Q则会出现数l访问越?/div>

把上面的代码中的choose(arr)Ҏ(gu)bubbleSort(arr)可以试冒排序的算?/div>


IT童 2012-08-22 10:15 发表评论
]]>JavaE序员面试中的多U程问题http://www.aygfsteel.com/javanetphp/archive/2012/08/22/385990.htmlIT童IT童Wed, 22 Aug 2012 02:07:00 GMThttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385990.htmlhttp://www.aygfsteel.com/javanetphp/comments/385990.htmlhttp://www.aygfsteel.com/javanetphp/archive/2012/08/22/385990.html#Feedback0http://www.aygfsteel.com/javanetphp/comments/commentRss/385990.htmlhttp://www.aygfsteel.com/javanetphp/services/trackbacks/385990.html阅读全文

IT童 2012-08-22 10:07 发表评论
]]>
վ֩ģ壺 Ʊ| բ| ɽʡ| | | ɽ| | | | ʷ| | | ؼ| ʦ| ԫ| | | Ϫ| | | | ޳| Ժ| | ʡ| | | ٲ| | н| | лͨ| | | ²| | | | ³ľ| | |