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

iPhone操作隊列和Java線程池

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

iPhone操作隊列Java線程池是本文要介紹的內(nèi)容,不多說,我們先來看內(nèi)容,看如何管理多線程對共享數(shù)據(jù)的訪問以及防止線程間的死鎖問題。

在涉及多線程并發(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,  
  2. int maximumPoolSize,long keepAliveTime,  
  3. TimeUnit unit,BlockingQueue<Runnable> workQueue,  
  4. 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)容介紹完了,希望本文對你有所幫助。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-19 17:36:42

iPhone操作隊列Java

2024-05-06 08:17:50

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

2021-09-11 15:26:23

Java多線程線程池

2025-02-04 11:45:23

2013-06-08 10:11:31

Java線程池架構(gòu)

2015-10-10 09:39:42

Java線程池源碼解析

2012-05-15 02:18:31

Java線程池

2012-02-29 13:26:20

Java

2020-09-04 10:29:47

Java線程池并發(fā)

2015-08-20 09:17:36

Java線程池

2020-11-25 11:33:47

Java線程技術(shù)

2023-12-05 13:46:09

解密協(xié)程線程隊列

2021-04-19 09:27:03

Java線程操作系統(tǒng)

2012-02-01 11:20:23

Java線程

2020-10-26 09:19:11

線程池消息

2013-08-21 16:17:09

iPhone多線程

2023-11-22 08:37:40

Java線程池

2013-05-23 15:59:00

線程池

2013-06-08 13:07:23

Java線程池調(diào)度器

2023-05-19 08:01:24

Key消費場景
點贊
收藏

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