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...