午夜欧美_国产视频一区二区_91精品国产综合久久久久久丝袜_亚洲精品久久久久久动漫_成人午夜精品一区二区三区_亚洲伦理影院

iPhone操作隊列 VS Java線程池

來源:網絡

點擊:1481

A+ A-

所屬頻道:新聞中心

關鍵詞: iPhone,操作隊列,Java線程池

      引言

      在涉及多線程并發操作時,如何管理多線程對共享數據的訪問以及防止線程間的死鎖問題是個很重要的話題。在 Java 語言中,從 Java 5 開始, Java 提供了自己的線程池 ThreadPoolExecutor 類;在 iPhone 中則提供了 NSOperationQueue 類進行多線程的管理和調度。

      什么是線程池?

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

      首先,啟動若干數量的線程,并讓這些線程處于睡眠狀態

      其次,當客戶端有新的請求時,線程池會喚醒某一個睡眠線程,讓它來處理客戶端的請求

      最后,當請求處理完畢,線程又處于睡眠狀態

      Java 線程池

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

      ThreadPoolExcutor 類常用的構造方式為

      ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue《Runnable》 workQueue,RejectedExecutionHandler handler)

      參數 corePoolSize 為線程池維護線程的最少數量

      參數 maximumPoolSize 為線程池維護線程的最大數量

      參數 keepAliveTime 為線程池維護線程所允許的空閑時間

      參數 unit 為線程池維護線程所允許的空閑時間的單位

      參數 workQueue 為線程池所使用的緩沖隊列

      參數 handler 為線程池對拒絕任務的處理句柄

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

      典型的用法如下:

      首先,構造一個線程池

      ThreadPoolExecutor threadPool =

      new ThreadPoolExecutor(2,4,3,TimeUnit.SECONDS,new ArrayBlockingQueue《Runnable》(3),new ThreadPoolExecutor.DiscardOldestPolicy());

      for(int i = 1;i 《= 5;i++)

      {

      try

      {

      String task = “task@”+i;

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

      threadPool.execute(new ThreadPoolTask());

      }

      }

      catch(Exception e)

      {

      e.printStackTrace();

      }

      而線程池所要執行的任務對象需要實現 Runnable 接口,線程池執行任務對象時調用任務對象的 run() 方法,它的實現代碼如下:

      public class ThreadPoolTask implements Runnable{

      ThreadPoolTask(){}

      public void run(){

      System.out.println(“start execute”);

      }

      }

      iPhone 操作隊列

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

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

      @interface ThreadPoolTask:NSOperation

      {

      }

      @end

      @implementation ThreadPoolTask

      - (void)main

      {

      NSLog(@”start execute”);

      }

      @end

      和 Java 語言中一樣,構造一個多線程池并添加任務對象到線程池中,線程池會調用任務對象的 - (void)main 方法執行任務, iPhone 中典型的任務隊列的實現如下:

      NSOperationQueue* threadPool = [[NSOperation alloc] init];

      [threadPool setMaxConcurrentOperationCount:4];

      for(int i = 1;i 《= 5;i++)

      {

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

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

      [threadPool add:([[ThreadPoolTask alloc] init])];

      }

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

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 国产毛片一区二区三区精品 | 久久成人a毛片免费观看网站 | 国产成人久久久精品毛片 | 国产成人精品亚洲一区 | 国产色综合久久无码有码 | 国内精品视频在线播放 | 国内精品视频一区二区三区 | 国产不卡一区二区视频免费 | 久久精品国产亚洲aa | 国产一区二区三区在线视频 | 在线播放一区二区精品产 | 美女全黄网站 | 亚洲国产精品免费视频 | 国产亚洲欧美一区二区 | 久久精品国产免费一区 | 日韩欧美国产综合 | 国产在线视频专区 | 国产精品视频一区二区三区经 | 欧美激情一区二区三区不卡 | 成人99国产精品一级毛片 | 91久久精品国产91久久性色也 | 亚洲欧美日韩激情在线观看 | 久久久久无码国产精品一区 | 国产日韩免费 | 久久久久久综合一区中文字幕 | 国产成人精品三区 | 成人久久久精品乱码一区二区三区 | 国产一级一级一级成人毛片 | 国产午夜小视频 | 欧美视频亚洲色图 | 激情午夜婷婷 | 毛片资源 | 国产一区二区视频在线 | 国产精品视频第一区二区三区 | 国产aⅴ一区二区 | 久久久国产这里有的是精品 | 国产不卡在线视频 | 欧美成人在线视频 | 91第一页 | 亚洲第一区se | 欧美激情一区二区三区不卡 |