成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析iPhone操作隊列和Java線程池

移動開發 iOS
iPhone操作隊列和Java線程池是本文要介紹的內容,在涉及多線程并發操作時,如何管理多線程對共享數據的訪問以及防止線程間的死鎖問題是個很重要的話題。

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

什么是線程池?

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

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

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

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

Java 線程池

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

ThreadPoolExcutor 類常用的構造方式為

  1. ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> 
  2. workQueue,RejectedExecutionHandler handler) 

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

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

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

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

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

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

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

典型的用法如下:

首先,構造一個線程池

  1. ThreadPoolExecutor threadPool =  
  2. new ThreadPoolExecutor(2,4,3,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),new ThreadPoolExecutor.DiscardOldestPolicy());  
  3. for(int i = 1;i <= 5;i++)  
  4. {  
  5.  
  6.      try  
  7. {  
  8.      String task = “task@”+i;  
  9.      System.out.println(“put”+task);  
  10.      threadPool.execute(new ThreadPoolTask());  
  11. }  
  12. }  
  13. catch(Exception e)  
  14. {  
  15.      e.printStackTrace();  

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

  1. public class ThreadPoolTask implements Runnable{  
  2. ThreadPoolTask(){}  
  3. public void run(){  
  4.      System.out.println(“start execute”);  
  5. }  

iPhone 操作隊列

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

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

  1. @interface ThreadPoolTask:NSOperation  
  2. {  
  3. }  
  4. @end  
  5.  
  6. @implementation ThreadPoolTask  
  7. - (void)main  
  8. {  
  9.   NSLog(@”start execute”);  
  10. }  
  11. @end 

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

  1. NSOperationQueue* threadPool = [[NSOperation alloc] init];  
  2. [threadPool setMaxConcurrentOperationCount:4];  
  3. for(int i = 1;i <= 5;i++)  
  4. {         
  5. NSString* task = [NSString stringWithFormat:@”task %d”,i];  
  6. NSLog(@“put %@”,task);  
  7. [threadPool add:([[ThreadPoolTask alloc] init])];  

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

小結:解析iPhone操作隊列和Java線程池的內容介紹完了,希望通過本文對學習能對你有所幫助!

責任編輯:zhaolei 來源: CSDN博客
相關推薦

2011-07-25 15:17:10

iPhone 操作隊列 Java

2011-06-02 17:27:49

iphone 多線程

2013-06-08 10:11:31

Java線程池架構

2015-10-10 09:39:42

Java線程池源碼解析

2020-11-25 11:33:47

Java線程技術

2011-06-22 15:50:45

QT 線程

2010-07-15 15:32:10

Perl線程

2022-12-16 08:31:37

調度線程池源碼

2021-09-11 15:26:23

Java多線程線程池

2024-05-06 08:17:50

線程池機制線程數

2011-08-12 11:23:47

iPhone窗口視圖

2021-05-26 11:30:24

Java線程池代碼

2025-02-04 11:45:23

2020-09-04 10:29:47

Java線程池并發

2011-08-19 14:47:48

iPhoneiPhone4iPad

2012-05-15 02:18:31

Java線程池

2012-02-29 13:26:20

Java

2020-12-08 08:53:53

編程ThreadPoolE線程池

2013-08-21 16:17:09

iPhone多線程

2021-04-19 09:27:03

Java線程操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色一级网 | 婷婷精品 | 国产日韩视频 | 亚洲日本乱码在线观看 | 男女网站免费观看 | 精品久久久久久国产 | 欧美日韩久久 | 福利在线看| 麻豆久久久久 | 午夜伦4480yy私人影院 | 精品亚洲一区二区三区四区五区 | 日韩手机在线视频 | 亚州国产 | 国产精品久久久久久久久久东京 | 99久热在线精品视频观看 | 黄色91在线| 夜夜爽99久久国产综合精品女不卡 | 九色视频网站 | www4虎 | 国产精品午夜电影 | 日韩国产一区二区三区 | 区一区二区三在线观看 | 亚洲一区二区三区在线播放 | 久久精品国产一区 | 日韩在线一区二区三区 | 中文字幕蜜臀av | 日韩a v在线免费观看 | 婷婷综合激情 | 国产日韩精品视频 | av网站观看 | 美女131mm久久爽爽免费 | 精品二三区 | 不卡一二三区 | 日本成人久久 | a级性视频| 97色在线视频 | 精品九九 | 色爱综合网 | 色偷偷噜噜噜亚洲男人 | 黄视频免费在线 | 午夜爽爽爽男女免费观看影院 |