<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>管理咨詢>iPhone操作隊(duì)列 VS Java線程池 查詢:
               
          iPhone操作隊(duì)列 VS Java線程池

          作者孫東風(fēng)2011-1-12轉(zhuǎn)載請注明出處

          引言

          在涉及多線程并發(fā)操作時(shí),如何管理多線程對共享數(shù)據(jù)的訪問以及防止線程間的死鎖問題是個(gè)很重要的話題。在Java語言中,從Java5開始,Java提供了自己的線程池ThreadPoolExecutor類;在iPhone中則提供了NSOperationQueue類進(jìn)行多線程的管理和調(diào)度。

          什么是線程池?

          線程池到底是怎么一回事呢?其實(shí)線程池的原理很簡單,類似于操作系統(tǒng)中的緩沖區(qū)的概念,它的典型的執(zhí)行流程如下:

          首先,啟動若干數(shù)量的線程,并讓這些線程處于睡眠狀態(tài)

          其次,當(dāng)客戶端有新的請求時(shí),線程池會喚醒某一個(gè)睡眠線程,讓它來處理客戶端的請求

          最后,當(dāng)請求處理完畢,線程又處于睡眠狀態(tài)

          Java線程池

          線程池可以由程序員自己來實(shí)現(xiàn),但是從Java5開始,Java語言自帶了線程池的類ThreadPoolExecutor,這個(gè)類提供了典型的線程池管理的接口,來研究ThreadPoolExecutor類的實(shí)現(xiàn)無疑更有借鑒意義。

          ThreadPoolExcutor類常用的構(gòu)造方式為

          ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueueRunnableworkQueue,RejectedExecutionHandlerhandler)

          參數(shù)corePoolSize為線程池維護(hù)線程的最少數(shù)量

          參數(shù)maximumPoolSize為線程池維護(hù)線程的最大數(shù)量

          參數(shù)keepAliveTime為線程池維護(hù)線程所允許的空閑時(shí)間

          參數(shù)unit為線程池維護(hù)線程所允許的空閑時(shí)間的單位

          參數(shù)workQueue為線程池所使用的緩沖隊(duì)列

          參數(shù)handler為線程池對拒絕任務(wù)的處理句柄

          一個(gè)任務(wù)可以通過excute(Runnable)方法被添加到線程池,任務(wù)就是一個(gè)實(shí)現(xiàn)了Runnable接口的對象,而線程池通過Runnable類型對象的run()方法來執(zhí)行任務(wù)。

          典型的用法如下:

          首先,構(gòu)造一個(gè)線程池

          ThreadPoolExecutorthreadPool=

          newThreadPoolExecutor(2,4,3,TimeUnit.SECONDS,newArrayBlockingQueueRunnable(3),newThreadPoolExecutor.DiscardOldestPolicy());

          for(inti=1;i=5;i++)

          {

          try

          {

          Stringtask=“task@”+i;

          System.out.println(“put”+task);

          threadPool.execute(newThreadPoolTask());

          }

          }

          catch(Exceptione)

          {

          e.printStackTrace();

          }

          而線程池所要執(zhí)行的任務(wù)對象需要實(shí)現(xiàn)Runnable接口,線程池執(zhí)行任務(wù)對象時(shí)調(diào)用任務(wù)對象的run()方法,它的實(shí)現(xiàn)代碼如下:

          publicclassThreadPoolTaskimplementsRunnable{

          ThreadPoolTask(){}

          publicvoidrun(){

          System.out.println(“startexecute”);

          }

          }

          iPhone操作隊(duì)列

          iPhone本身也支持多線程開發(fā),同樣,NSThread類提供對多線程開發(fā)的支持時(shí)也面臨多線程的共享數(shù)據(jù)管理和死鎖問題,于是iPhone也提供了類似于Java線程池的解決方案:任務(wù)隊(duì)列NSOperationQueue類。

          和Java語言的Runnable接口一樣,iPhone提供了NSOperation接口進(jìn)行任務(wù)對象的封裝,而通過將任務(wù)對象加入到NSOperationQueue隊(duì)列,NSOperationQueue隊(duì)列會分配線程進(jìn)行任務(wù)對象的執(zhí)行,任務(wù)對象的執(zhí)行通過-(void)main方法,下面是典型的任務(wù)對象和任務(wù)隊(duì)列的實(shí)現(xiàn):

          @interfaceThreadPoolTask:NSOperation

          {

          }

          @end

          @implementationThreadPoolTask

          -(void)main

          {

          NSLog(@”startexecute”);

          }

          @end

          和Java語言中一樣,構(gòu)造一個(gè)多線程池并添加任務(wù)對象到線程池中,線程池會調(diào)用任務(wù)對象的-(void)main方法執(zhí)行任務(wù),iPhone中典型的任務(wù)隊(duì)列的實(shí)現(xiàn)如下:

          NSOperationQueue*threadPool=[[NSOperationalloc]init];

          [threadPoolsetMaxConcurrentOperationCount:4];

          for(inti=1;i=5;i++)

          {

          NSString*task=[NSStringstringWithFormat:@”task%d”,i];

          NSLog(@“put%@”,task);

          [threadPooladd:([[ThreadPoolTaskalloc]init])];

          }

          可以看到,iPhone通過NSOperationQueue提供了一套類似于線程池的機(jī)制,通過它可以更加方便的進(jìn)行多線程的并發(fā)操作,從而使得程序員從繁雜的多線程共享數(shù)據(jù)管理和死鎖問題中解脫出來。


          河道水毀修復(fù)工程施工方案(堤防)項(xiàng)目經(jīng)理,項(xiàng)目的靈魂
          《合同法》總則的主要內(nèi)容:合同終止讓管理者對“管理壞行為”說“再見”
          建筑工程模板工程施工方案(33頁)梁、柱接頭節(jié)點(diǎn)平面及剖面圖
          南水北調(diào)渠道混凝土襯砌施工技術(shù)方案如保學(xué)好JavaScript?初學(xué)者應(yīng)注意的七個(gè)細(xì)節(jié)
          浙江龍泉全力打造城市森林“城市越綠,生活越幸?!?/a>雨水管、變形縫制作安裝技術(shù)交底
          硬盤引導(dǎo)型故障分析及排除淺析建設(shè)項(xiàng)目招投標(biāo)階段造價(jià)的控制
          實(shí)用的端口大全(中文版)建筑風(fēng)水 大自然與人文環(huán)境的完美結(jié)合
          建設(shè)工程施工合同的條件
          信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 美女草逼视频 | 亚洲夜色成人久久 | 四房色播开心五月天 | 久久综合国产视频 | 超碰在线进入 | 99色在线 | 国产日韩精品无码 | 水蜜桃成人视频 | 亚洲黄色五月天 | 黄色AAA毛片 |