自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

什么是線程池?

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

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

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

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

Java 線程池

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

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

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

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

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

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

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

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

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

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

典型的用法如下:

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

  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();  

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

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

iPhone 操作隊列

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

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

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

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

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

小結(jié):解析iPhone操作隊列和Java線程池的內(nèi)容介紹完了,希望通過本文對學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: CSDN博客
相關(guān)推薦

2011-07-25 15:17:10

iPhone 操作隊列 Java

2013-06-08 10:11:31

Java線程池架構(gòu)

2015-10-10 09:39:42

Java線程池源碼解析

2011-06-02 17:27:49

iphone 多線程

2020-11-25 11:33:47

Java線程技術(shù)

2011-06-22 15:50:45

QT 線程

2010-07-15 15:32:10

Perl線程

2024-05-06 08:17:50

線程池機制線程數(shù)

2022-12-16 08:31:37

調(diào)度線程池源碼

2021-09-11 15:26:23

Java多線程線程池

2021-05-26 11:30:24

Java線程池代碼

2011-08-12 11:23:47

iPhone窗口視圖

2025-02-04 11:45:23

2012-05-15 02:18:31

Java線程池

2012-02-29 13:26:20

Java

2020-09-04 10:29:47

Java線程池并發(fā)

2011-08-19 14:47:48

iPhoneiPhone4iPad

2020-12-08 08:53:53

編程ThreadPoolE線程池

2015-08-20 09:17:36

Java線程池

2023-12-05 13:46:09

解密協(xié)程線程隊列
點贊
收藏

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