偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JDK5線(xiàn)程池亮點(diǎn)特性淺析

開(kāi)發(fā) 后端
JDK5中的新特性java.util.concurrent線(xiàn)程池是什么情況呢?本文將向你介紹其中的奧秘。

JDK5線(xiàn)程池亮點(diǎn)特性就是將Doug Lea的并發(fā)庫(kù)引入到Java標(biāo)準(zhǔn)庫(kù)中。Doug Lea確實(shí)是一個(gè)牛人,能教書(shū),能出書(shū),能編碼,不過(guò)這在國(guó)外還是比較普遍的,而國(guó)內(nèi)的教授們就相差太遠(yuǎn)了。

一般的服務(wù)器都需要線(xiàn)程池,比如Web、FTP等服務(wù)器,不過(guò)它們一般都自己實(shí)現(xiàn)了線(xiàn)程池,比如以前介紹過(guò)的Tomcat、Resin和Jetty等,現(xiàn)在有了JDK5,我們就沒(méi)有必要重復(fù)造車(chē)輪了,直接使用就可以,何況使用也很方便,性能也非常高。

  1. packageconcurrent;  
  2.   importjava.util.concurrent.ExecutorService;  
  3.   importjava.util.concurrent.Executors;  
  4.   publicclassTestThreadPool{  
  5.   publicstaticvoidmain(Stringargs[])throwsInterruptedException{  
  6.   //onlytwothreads  
  7.   ExecutorServiceexec=Executors.newFixedThreadPool(2);  
  8.   for(intindex=0;index<100;index++){  
  9.   Runnablerun=newRunnable(){  
  10.   publicvoidrun(){  
  11.   longtime=(long)(Math.random()*1000);  
  12.   System.out.println("Sleeping"+time+"ms");  
  13.   try{  
  14.   Thread.sleep(time);  
  15.   }catch(InterruptedExceptione){  
  16.   }  
  17.   }  
  18.   };  
  19.   exec.execute(run);  
  20.   }  
  21.   //mustshutdown  
  22.   exec.shutdown();  
  23.   }  
  24.   } 

上面是一個(gè)簡(jiǎn)單的例子,使用了2個(gè)大小的線(xiàn)程池來(lái)處理100個(gè)線(xiàn)程。但有一個(gè)問(wèn)題:在for循環(huán)的過(guò)程中,會(huì)等待線(xiàn)程池有空閑的線(xiàn)程,所以主線(xiàn)程會(huì)阻塞的。為了解決這個(gè)問(wèn)題,一般啟動(dòng)一個(gè)線(xiàn)程來(lái)做for循環(huán),就是為了避免由于線(xiàn)程池滿(mǎn)了造成主線(xiàn)程阻塞。不過(guò)在這里我沒(méi)有這樣處理。[重要修正:經(jīng)過(guò)測(cè)試,即使線(xiàn)程池大小小于實(shí)際線(xiàn)程數(shù)大小,線(xiàn)程池也不會(huì)阻塞的,這與Tomcat的線(xiàn)程池不同,它將Runnable實(shí)例放到一個(gè)“無(wú)限”的BlockingQueue中,所以就不用一個(gè)線(xiàn)程啟動(dòng)for循環(huán)。

另外它使用了Executors的靜態(tài)函數(shù)生成一個(gè)固定的線(xiàn)程池,顧名思義,線(xiàn)程池的線(xiàn)程是不會(huì)釋放的,即使它是Idle。這就會(huì)產(chǎn)生性能問(wèn)題,比如如果線(xiàn)程池的大小為200,當(dāng)全部使用完畢后,所有的線(xiàn)程會(huì)繼續(xù)留在池中,相應(yīng)的內(nèi)存和線(xiàn)程切換(while(true)+sleep循環(huán))都會(huì)增加。如果要避免這個(gè)問(wèn)題,就必須直接使用ThreadPoolExecutor()來(lái)構(gòu)造??梢韵馮omcat的線(xiàn)程池一樣設(shè)置“最大線(xiàn)程數(shù)”、“最小線(xiàn)程數(shù)”和“空閑線(xiàn)程keepAlive的時(shí)間”。通過(guò)這些可以基本上替換Tomcat的線(xiàn)程池實(shí)現(xiàn)方案。

需要注意的是線(xiàn)程池必須使用shutdown來(lái)顯式關(guān)閉,否則主線(xiàn)程就無(wú)法退出。shutdown也不會(huì)阻塞主線(xiàn)程。

許多長(zhǎng)時(shí)間運(yùn)行的應(yīng)用有時(shí)候需要定時(shí)運(yùn)行任務(wù)完成一些諸如統(tǒng)計(jì)、優(yōu)化等工作,比如在電信行業(yè)中處理用戶(hù)話(huà)單時(shí),需要每隔1分鐘處理話(huà)單;網(wǎng)站每天凌晨統(tǒng)計(jì)用戶(hù)訪(fǎng)問(wèn)量、用戶(hù)數(shù);大型超時(shí)凌晨3點(diǎn)統(tǒng)計(jì)當(dāng)天銷(xiāo)售額、以及最熱賣(mài)的商品;每周日進(jìn)行數(shù)據(jù)庫(kù)備份;公司每個(gè)月的10號(hào)計(jì)算工資并進(jìn)行轉(zhuǎn)帳等,這些都是定時(shí)任務(wù)。通過(guò) java的并發(fā)庫(kù)concurrent可以輕松的完成這些任務(wù),而且非常的簡(jiǎn)單。

  1. packageconcurrent;  
  2.   importstaticjava.util.concurrent.TimeUnit.SECONDS;  
  3.   importjava.util.Date;  
  4.   importjava.util.concurrent.Executors;  
  5.   importjava.util.concurrent.ScheduledExecutorService;  
  6.   importjava.util.concurrent.ScheduledFuture;  
  7.   publicclassTestScheduledThread{  
  8.   publicstaticvoidmain(String[]args){  
  9.   finalScheduledExecutorServicescheduler=Executors  
  10.   .newScheduledThreadPool(2);  
  11.   finalRunnablebeeper=newRunnable(){  
  12.   intcount=0;  
  13.   publicvoidrun(){  
  14.   System.out.println(newDate()+"beep"+(++count));  
  15.   }  
  16.   };  
  17.   //1秒鐘后運(yùn)行,并每隔2秒運(yùn)行一次  
  18.   finalScheduledFuture<?>beeperHandle=scheduler.scheduleAtFixedRate(  
  19.   beeper,1,2,SECONDS);  
  20.   //2秒鐘后運(yùn)行,并每次在上次任務(wù)運(yùn)行完后等待5秒后重新運(yùn)行  
  21.   finalScheduledFuture<?>beeperHandle2=scheduler  
  22.   .scheduleWithFixedDelay(beeper,2,5,SECONDS);  
  23.   //30秒后結(jié)束關(guān)閉任務(wù),并且關(guān)閉Scheduler  
  24.   scheduler.schedule(newRunnable(){  
  25.   publicvoidrun(){  
  26.   beeperHandle.cancel(true);  
  27.   beeperHandle2.cancel(true);  
  28.   scheduler.shutdown();  
  29.   }  
  30.   },30,SECONDS);  
  31.   }  
  32.   } 

為了退出進(jìn)程,上面的代碼中加入了關(guān)閉Scheduler的操作。而對(duì)于24小時(shí)運(yùn)行的應(yīng)用而言,是沒(méi)有必要關(guān)閉Scheduler的。

JDK5線(xiàn)程池亮點(diǎn)特性java.util.concurrent就向你介紹到這里,關(guān)于更多的信息我們將會(huì)陸續(xù)給你介紹。

【編輯推薦】

  1. JDK1.6的十大技術(shù)淺談
  2. 安裝JDK后JRE與JVM聯(lián)系淺談
  3. JDK源碼Java.lang.Boolean的淺析
  4. JDK源碼分析之Set類(lèi)詳解
  5. JDK源碼中ClassLoader的淺析
責(zé)任編輯:仲衡 來(lái)源: CSDN博客
相關(guān)推薦

2009-07-08 16:43:54

JDK5ProcessBuil

2009-07-22 09:39:18

CLR線(xiàn)程池

2012-02-29 13:26:20

Java

2021-08-20 08:22:12

Tomcat原生線(xiàn)程池

2020-07-08 12:05:55

Java線(xiàn)程池策略

2024-01-23 08:23:24

Java虛擬線(xiàn)程

2024-06-13 00:54:19

2021-03-08 08:55:22

開(kāi)發(fā)

2009-07-07 16:39:40

JDK Observe

2009-03-23 10:53:00

PHP5.3新特性PHP5.3PHP5

2014-08-13 10:41:08

linux線(xiàn)程

2009-07-08 14:06:22

ClassLoaderJDK源碼

2009-07-09 11:02:37

JDK5.0內(nèi)置工具

2009-07-08 17:59:51

JDK JRE

2009-07-24 17:30:37

Javascript閉

2009-07-09 11:43:22

JDK1.4assert

2024-01-26 08:33:14

JDK17JDK11版本

2009-07-07 15:53:02

JDK日志

2009-07-08 17:02:11

JDK實(shí)現(xiàn)調(diào)用攔截器

2022-02-10 09:37:14

@layerCSSChrome
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)