IOS 建立併發執行緒的例項詳解

2022-09-29 16:30:12 字數 2238 閱讀 7806

ios 建立併發執行緒的例項詳解

建立併發執行緒

主線程一般都是處理ui介面及使用者互動的事兒的。其他的事一般就要另外的執行緒去處理,如**,計算等。。。

現在先簡單建立3個執行緒,分別列印出1-1000,,為了方便,執行緒3就放在主線程中執行。

- (void) firstcounter

} }

- (void) secondcounter

} }

- (void) thirdcounter

} - (void)viewdidload

由於thirdcounter 函式沒有執行在單獨的執行緒中,所以不需要自動釋放池(autorelease pool)。這個方法將在應用程式的主線程中執行,每乙個cocoa touch程式都會自

動的給該主線程建立乙個自動釋放池。  

在**的最後通過呼叫 detachnewthreadselector,把將第乙個計數器和第二個計數器執行在獨立的執行緒中。現在,如果你執行程式,將會在控制台視窗看到如下資訊:

second counter = 921

third counter = 301

second counter = 922

second counter = 923

second counter = 924

first counter = 956

second counter = 925

counter = 957

second counter = 926

first counter = 958

third counter = 302

second counter = 927

third counter = 303

second counter = 928

可以看出,這三個計時器是同時執行的,他們輸出的內容是隨機交替的。 每乙個執行緒必須建立乙個 autorelease pool。在 autorelease pool 被 release 之前程式設計客棧,autorelease pool 會一直持有被 autoreleased 的物件的引用。在引用計數記憶體管理環境中這是乙個非常重要的機制,例如cocoa touch中的物件就能夠被autoreleased。無論何時,在建立乙個物件例項時,該物件的引用計數是1,但是當建立的autorelease pool物件被release了,那麼 autorelease 的物件同樣會傳送乙個 release 訊息,如果此時,它的引用計數仍然是 1,那麼該物件將被銷毀。 

&nb程式設計客棧sp;    每乙個執行緒都需要建立乙個 autorelease pool,當做是該執行緒第乙個被建立的物件。如果不這樣做,如果不這樣做,當執行緒退出的時候,你分配**程中的物件會發生記憶體洩露。為了更好的理解,我們來看看下面的**: 

- (void) autoreleasethread:(id)paramsender

- (void)viewdidload

如果你執行這段**,,你就會在控制台視窗看到這樣的輸出資訊:

*** __nsautoreleasenopool(): object 0x5b2c990 of

class nscfstring autoreleased with no pool in place - just leaking

*** __nsautoreleasenopool(): object 0x5b2ca30 of

class nspathstore2 autoreleased with no pool in place - just leaking

*** __nsautoreleasenopool(): object 0x5b205c0 of

class nspathstore2 autoreleased with no pool in place - just leaking

*** __nsautoreleasenopool(): object 0x5b2d650 of

class uiimage autoreleased with no pool in place - just leaking

上面的資訊顯示了我們建立的 autorelease 的 uiimage 例項產生了乙個記憶體洩露,另外,filepath 和其他的物件也產生了洩露。這是因為在我們的執行緒中,沒有在開始的時候建立和初始化乙個autorelease pool。下面是正確的**,你可以測試一下,確保它沒有記憶體洩露:

- (void) autoreleasethread:(id)paramsender

}

執行緒的建立例項

public class testthread1 catch interruptedexception e system.out.println thread.currentthread getname thread.start thread thread1 new thread new runna...

詳解Python併發程式設計之建立多執行緒的幾種方法

大家好,併發程式設計 今天開始進入第二篇。本文目錄 經過總結,python建立多執行緒主要有如下兩種方法 接下來,我們就來揭開多執行緒的神秘面紗。學會使用函式建立多執行緒 在pytho程式設計客棧n3中,python提供了乙個內建模組 threading.thread,可以很方便地讓我們建立多執行緒...

Java併發程式設計 執行緒池 例項

public class test executor.shutdown while true try catch interruptedexception e public void testrun threadpoolexecutor executor,final int a catch inte...