監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關閉

iPhone操作隊列 VS Java線程池

申請免費試用、咨詢電話:400-8352-114

 

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

 

引言

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

 

什么是線程池?

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

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

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

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

 

Java 線程池

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

ThreadPoolExcutor 類常用的構造方式為

 

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

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

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

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

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

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

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

 

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

 

典型的用法如下:

首先,構造一個線程池

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

}

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

public class ThreadPoolTask implements Runnable{

ThreadPoolTask(){}

public void run(){

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

}

}

 

iPhone 操作隊列

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

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

@interface ThreadPoolTask:NSOperation

{

}

@end

 

@implementation ThreadPoolTask

- (void)main

{

  NSLog(@”start execute”);

}

@end

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

 

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

 




發(fā)布:2007-04-16 17:23    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]

泛普入庫出庫管理軟件其他應用

藥品進銷存管理系統(tǒng) 醫(yī)藥進銷存 超市進銷存管理系統(tǒng) 服裝進銷存軟件 倉庫進銷存管理軟件 進銷存財務軟件 傻瓜進銷存 萬能進銷存軟件 進銷存網(wǎng)絡版 進銷存管理系統(tǒng) 進銷存系統(tǒng) 服裝庫存管理軟件 條碼倉庫管理軟件 庫存管理軟件 倉庫管理軟件 庫房管理軟件 出入庫管理軟件 倉儲管理系統(tǒng) 倉庫管理系統(tǒng) 庫存管理系統(tǒng) 入庫出庫管理軟件 進銷存軟件排名 倉庫管理軟件哪個好