天天看點

線程管理(一)線程的建立和運作

在這個指南中,我們将學習如何在java程式中建立和運作線程。與每個java語言中的元素一樣,線程是<b>對象</b>。在java中,我們有2個方式建立線程:

通過直接繼承thread類,然後覆寫run()方法。

建構一個實作runnable接口的類, 然後建立一個thread類對象并傳遞runnable對象作為構造參數

在這個指南中,我們将使用第二種方法來制作一個簡單的程式,它能建立和運作10個線程。每一個線程能計算和輸出1-10以内的乘法表。

準備

指南中的例子是使用eclipse ide 來實作的。如果你使用eclipse 或者其他的ide,例如netbeans, 打開并建立一個新的java項目。

怎麼做呢<b>…</b>

按照這些步驟來實作下面的例子:

1.     建立一個名為calculator的類,這個類要實作runnable接口。

<code>1</code>

<code>public</code> <code>class</code> <code>calculator</code><code>implements</code> <code>runnable {</code>

2.   聲明一個名為number 的private int為屬性,然後實作構造函數并初始化其值。

<code>private</code> <code>int</code> <code>number;</code>

<code>2</code>

<code>public</code> <code>calculator(</code><code>int</code> <code>number) {</code>

<code>3</code>

<code>    </code><code>this</code><code>.number=number;</code>

<code>4</code>

<code>}</code>

3.   實作run()方法. 這方法是給我們建立的線程執行指令,是以這個方法将計算數字乘法表。

<code>@override</code>

<code>public</code> <code>void</code> <code>run() {</code>

<code>  </code><code>for</code> <code>(</code><code>int</code> <code>i=</code><code>1</code><code>; i&lt;=</code><code>10</code><code>; i++){</code>

<code>   </code><code>system.out.printf(</code><code>"%s: %d * %d = %d\n"</code><code>,thread.currentthread().getname(),number,i,i*number);</code>

<code>5</code>

<code>6</code>

4.   現在, 實作程式的main類。建立一個名為 main的類并包含 main() 方法.

<code>public</code> <code>class</code> <code>main {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>

5.   在 main() 方法内,建立一個疊代10次的for循環。在每次循環中,建立一個 calculator 類的對象,  一個thread類的對象, 然後傳遞 calculator 對象作為thread類構造函數的參數,最後調用線程對象的start() 方法。

<code>for</code> <code>(</code><code>int</code> <code>i=</code><code>1</code><code>; i&lt;=</code><code>10</code><code>; i++){</code>

<code>   </code><code>calculator calculator=</code><code>new</code> <code>calculator(i); thread thread=</code><code>new</code> <code>thread(calculator);</code>

<code>   </code><code>thread.start();</code>

6.   運作程式并觀察不同的線程是如何并行工作的。

<b>它是怎麼工作的</b><b>…</b>

接下來是部分的程式輸出的裁圖。我們可以檢視全部建立的線程,并行地運作, 見下圖:

線程管理(一)線程的建立和運作

每個java程式最少有一個執行線程。當你運作程式的時候, jvm運作負責調用main()方法的執行線程。

當調用thread對象的start()方法時, 我們建立了另一個執行線程。在這些start()方法調出後,我們的程式就有了多個執行線程。

當全部的線程執行結束時(更具體點,所有非守護線程結束時),java程式就結束了。如果初始線程(執行main()方法的主線程)運作結束,其他的線程還是會繼續執行直到執行完成。但是如果某個線程調用system.exit()訓示終結程式,那麼全部的線程都會結束執行。

建立一個thread類的對象不會建立新的執行線程。同樣,調用實作runnable接口的 run()方法也不會建立一個新的執行線程。隻有調用start()方法才能建立一個新的執行線程。

更多<b>…</b>

在介紹這個指南時我們提到還有另一種方法可以建立新的執行線程。你可以實作一個類,這個類擴充thread類并覆寫它的run()方法。接着,你就可以從這個類建立一個對象并調用start()方法來建立一個新的執行線程。

參見

第一章,線程管理:通過建立工廠建立線程

繼續閱讀