亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

100行Java代碼構建一個線程池

2019-11-18 10:40:59
字體:
來源:轉載
供稿:網友

  在現代的操作系統中,有一個很重要的概念――線程,幾乎所有目前流行的操作系統都支持線程,線程來源于操作系統中進程的概念,進程有自己的虛擬地址空間以及正文段、數據段及堆棧,而且各自占有不同的系統資源(例如文件、環境變量等等)。與此不同,線程不能單獨存在,它依附于進程,只能由進程派生。假如一個進程派生出了兩個線程,那這兩個線程共享此進程的全局變量和代碼段,但每個線程各擁有各自的堆棧,因此它們擁有各自的局部變量,線程在UNIX系統中還被進一步分為用戶級線程(由進程自已來治理)和系統級線程(由操作系統的調度程序來治理)。

  既然有了進程,為什么還要提出線程的概念呢?因為與創建一個新的進程相比,創建一個線程將會耗費小得多的系統資源,對于一些小型的應用,可能感覺不到這點,但對于那些并發進程數非凡多的應用,使用線程會比使用進程獲得更好的性能,從而降低操作系統的負擔。另外,線程共享創建它的進程的全局變量,因此線程間的通訊編程會更將簡單,完全可以拋棄傳統的進程間通訊的ipC編程,而采用共享全局變量來進行線程間通訊。

  有了上面這個概念,我們下面就進入正題,來看一下線程池究竟是怎么一回事?其實線程池的原理很簡單,類似于操作系統中的緩沖區的概念,它的流程如下:先啟動若干數量的線程,并讓這些線程都處于睡眠狀態,當客戶端有一個新請求時,就會喚醒線程池中的某一個睡眠線程,讓它來處理客戶端的這個請求,當處理完這個請求后,線程又處于睡眠狀態??赡苣阋苍S會問:為什么要搞得這么麻煩,假如每當客戶端有新的請求時,我就創建一個新的線程不就完了?這也許是個不錯的方法,因為它能使得你編寫代碼相對輕易一些,但你卻忽略了一個重要的問題――性能!就拿我所在的單位來說,我的單位是一個省級數據大集中的銀行網絡中心,高峰期每秒的客戶端請求并發數超過100,假如為每個客戶端請求創建一個新線程的話,那耗費的CPU時間和內存將是驚人的,假如采用一個擁有200個線程的線程池,那將會節約大量的的系統資源,使得更多的CPU時間和內存用來處理實際的商業應用,而不是頻繁的線程創建與銷毀。

  既然一切都明白了,那我們就開始著手實現一個真正的線程池吧,線程編程可以有多種語言來實現,例如C、C++、java等等,但不同的操作系統提供不同的線程API接口,為了讓你能更明白線程池的原理而避免陷入煩瑣的API調用之中,我采用了JAVA語言來實現它,由于JAVA語言是一種跨平臺的語言,因此你不必為使用不同的操作系統而無法編譯運行本程序而苦惱,只要你安裝了JDK1.2以上的版本,都能正確地編譯運行本程序。另外JAVA語言本身就內置了線程對象,而且JAVA語言是完全面像對象的,因此能夠讓你更清楚地了解線程池的原理,假如你注重看一下本文的標題,你會發現整個示例程序的代碼只有大約100行。

  本示例程序由三個類構成,第一個是TestThreadPool類,它是一個測試程序,用來模擬客戶端的請求,當你運行它時,系統首先會顯示線程池的初始化信息,然后提示你從鍵盤上輸入字符串,并按下回車鍵,這時你會發現屏幕上顯示信息,告訴你某個線程正在處理你的請求,假如你快速地輸入一行行字符串,那么你會發現線程池中不斷有線程被喚醒,來處理你的請求,在本例中,我創建了一個擁有10個線程的線程池,假如線程池中沒有可用線程了,系統會提示你相應的警告信息,但假如你稍等片刻,那你會發現屏幕上會陸陸續續提示有線程進入了睡眠狀態,這時你又可以發送新的請求了。

  第二個類是ThreadPoolManager類,顧名思義,它是一個用于治理線程池的類,它的主要職責是初始化線程池,并為客戶端的請求分配不同的線程來進行處理,假如線程池滿了,它會對你發出警告信息。

  最后一個類是SimpleThread類,它是Thread類的一個子類,它才真正對客戶端的請求進行處理,SimpleThread在示例程序初始化時都處于睡眠狀態,但假如它接受到了ThreadPoolManager類發過來的調度信息,則會將自己喚醒,并對請求進行處理。
  首先我們來看一下TestThreadPool類的源碼

//TestThreadPool.java
1 import java.io.*;
2
3
4 public class TestThreadPool
5 {
6 public static void main(String[] args)
7 {
8 try{
9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10 String s;
11 ThreadPoolManager manager = new ThreadPoolManager(10);
12 while((s = br.readLine()) != null)
13 {
14 manager.PRocess(s);
15 }
16 }catch(IOException e){}
17 }
18 }
  由于此測試程序用到了輸入輸入類,因此第1行導入了JAVA的基本IO處理包,在第11行中,我們創建了一個名為manager的類,它給ThreadPoolManager類的構造函數傳遞了一個值為10的參數,告訴ThreadPoolManager類:我要一個有10個線程的池,給我創建一個吧!第12行至15行是一個無限循環,它用來等待用戶的鍵入,并將鍵入的字符串保存在s變量中,并調用ThreadPoolManager類的process方法來將這個請求進行處理。

  下面我們再進一步跟蹤到ThreadPoolManager類中去,以下是它的源代碼:

//ThreadPoolManager.java
1 import java.util.*;
2
3
4 class ThreadPoolManager
5 {
6
7 private int maxThread;
8 public Vector vector;
9 public void setMaxThread(int threadCount)
10 {
11 maxThread = threadCount;
12 }
13
14 public ThreadPoolManager(int threadCount)
15 {
16 setMaxThread(threadCount);
17 System.out.println("Starting thread pool...");
18 vector = new Vector();
19 for(int i = 1; i <= 10; i++)
20 {
21 SimpleThread thread = new SimpleThread(i);
22 vector.addElement(thread);
23 thread.start();
24 }
25 }
26
27 public void process(String argument)
28 {
29 int i;
30 for(i = 0; i < vector.size(); i++)
31 {
32 SimpleThread currentThread = (SimpleThread)vector.elementAt(i);
33 if(!currentThread.isRunning())
34 {
35 System.out.println("Thread "+ (i+1) +" is processing:" +
argument);
36 currentThread.setArgument(argument);
37 currentThread.setRunning(true);
38 return;
39 }
40 }
41 if(i == vector.size())
42 {
43 System.out.println("pool is full, try in another time.");
44 }
45 }
46 }//end of class ThreadPoolManager
  我們先關注一下這個類的構造函數,然后再看它的process()方法。第16-24行是它的構造函數,首先它給ThreadPoolManager類的成員變量maxThread賦值,maxThread表示用于控制線程池中最大線程的數量。第18行初始化一個數組vector,它用來存放所有的SimpleThread類,這時候就充分體現了JAVA語言的優越性與藝術性:假如你用C語言的話,至少要寫100行以上的代碼來完成vector的功能,而且C語言數組只能容納類型統一的基本數據類型,無法容納對象。好了,閑話少說,第19-24行的循環完成這樣一個功能:先創建一個新的SimpleThread類,然后將它放入vector中去,最后用thread.start()來啟動這個線程,為什么要用start()方法來啟動線程呢?因為這是JAVA語言中所規定的,假如你不用的話,那這些線程將永遠得不到激活,從而導致本示例程序根本無法運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚州精品天堂中文字幕| 亚洲毛片在线免费观看| 2019最新中文字幕| 日韩美女在线播放| 日韩经典一区二区三区| 国产精品久久久久久亚洲调教| 欧美色视频日本版| 国产成人91久久精品| 成人性生交大片免费看小说| 91久久久久久国产精品| 国产日韩欧美在线| 国产精品久久久久高潮| 国产精品小说在线| 57pao成人永久免费视频| 亚洲久久久久久久久久| 亚洲伊人久久综合| 欧洲中文字幕国产精品| 亚洲一区二区三区在线视频| 激情成人中文字幕| 最近日韩中文字幕中文| 久久久久久免费精品| 欧美视频中文字幕在线| 欧美成人午夜影院| 欧美精品制服第一页| 国产一区二中文字幕在线看| 日韩中文在线观看| 狠狠操狠狠色综合网| 日韩欧美一区二区三区久久| 日韩欧美在线中文字幕| 亚洲免费高清视频| 亚洲欧美日韩国产中文专区| 成人激情黄色网| 97国产在线观看| 高清在线视频日韩欧美| 成人免费高清完整版在线观看| 精品伊人久久97| 爽爽爽爽爽爽爽成人免费观看| 中文字幕亚洲第一| 欧美视频精品一区| 亚洲精品免费一区二区三区| 精品国产自在精品国产浪潮| 欧美激情在线观看| 欧美夫妻性生活xx| 亚洲欧美在线播放| 55夜色66夜色国产精品视频| 日韩中文字幕在线观看| 欧美精品久久久久久久久久| 一本色道久久88综合日韩精品| 欧美在线观看网站| 亚洲性日韩精品一区二区| 91久久精品国产91久久| 午夜精品三级视频福利| 国产精品极品尤物在线观看| 久久久国产精品x99av| 亚洲午夜av电影| 91精品视频专区| 亚洲va欧美va国产综合久久| 久久综合五月天| 色婷婷久久av| 欧美黑人一级爽快片淫片高清| 亚洲第一在线视频| 97精品欧美一区二区三区| 欧美多人爱爱视频网站| 久久久久久久久国产| 欧美日韩综合视频网址| 精品视频久久久久久| 国产精品xxx视频| 亚洲国产精品电影| 久久免费精品日本久久中文字幕| 亚洲天堂久久av| 欧美亚洲视频在线观看| 日韩av三级在线观看| 欧美激情高清视频| 夜夜嗨av色一区二区不卡| 久久久久亚洲精品| 成人性生交xxxxx网站| 亚洲欧美日韩成人| 91亚洲精品视频| 性欧美办公室18xxxxhd| 欧美激情乱人伦一区| 免费不卡在线观看av| 亚洲午夜精品久久久久久久久久久久| 久久久999国产精品| 成人免费高清完整版在线观看| 国产精品稀缺呦系列在线| 国产亚洲成精品久久| 欧美在线视频在线播放完整版免费观看| 久久久久久有精品国产| 色综合视频网站| 久久精品夜夜夜夜夜久久| 1769国产精品| 亚洲美女www午夜| 亚洲免费视频一区二区| 超碰97人人做人人爱少妇| 国产精品久久久久不卡| 亚洲自拍在线观看| 欧美午夜丰满在线18影院| 日本精品久久久久久久| 青青草一区二区| 不卡av在线网站| 欧美激情精品久久久久久黑人| 亚洲欧美另类自拍| 色综合久综合久久综合久鬼88| 国产精品久久久精品| 国产精品久久久久免费a∨| 日韩高清中文字幕| 国产精品毛片a∨一区二区三区|国| 国产精品爽爽爽爽爽爽在线观看| 国产香蕉一区二区三区在线视频| 在线中文字幕日韩| 91久久久久久久久| 欧美日韩国内自拍| 欧美日韩视频在线| www.色综合| 美女少妇精品视频| 久久香蕉国产线看观看网| 97香蕉久久夜色精品国产| 亚洲欧美国产精品va在线观看| 久久精品成人动漫| 欧美日韩激情视频| 国产精品久久久久久亚洲影视| 成人性生交大片免费看小说| 久久久久久久网站| 国产精品久久久91| 日韩毛片在线观看| 欧美另类极品videosbestfree| 亚洲欧洲成视频免费观看| 国产精品久久久久久久av电影| 欧美性xxxx在线播放| 久久精品国产免费观看| 亚洲毛片在线看| 国产乱肥老妇国产一区二| 久久久久成人精品| 亚洲第一区在线观看| 中文字幕亚洲综合久久| 久久免费视频这里只有精品| 热久久免费视频精品| 欧美野外猛男的大粗鳮| 国产精品综合久久久| 欧美黄色三级网站| 欧美极品美女视频网站在线观看免费| 亚洲电影中文字幕| 欧美成人自拍视频| 成人国产精品一区二区| 深夜福利一区二区| 日韩在线欧美在线| 2019日本中文字幕| 久久成人精品电影| 国产一区二中文字幕在线看| 最近中文字幕日韩精品| 亚洲电影免费观看高清| 韩国福利视频一区| 国产精品美女主播在线观看纯欲| 亚洲精品美女在线| 欧美日韩人人澡狠狠躁视频| 日韩精品中文字幕在线播放| 国内精品400部情侣激情| 精品国产美女在线| 久久久中文字幕| 亚洲在线观看视频| 日韩精品日韩在线观看| 久久天堂av综合合色| 亚洲男人的天堂在线播放| 国产中文欧美精品|