在 Java 程序中創建線程有幾種方法
Java 線程可以通過直接實例化 Thread 對象或實例化繼承 Thread 的對象來創建其它線程
當我們討論 Java 程序中的線程時
在一個線程對新線程的 Thread 對象調用 start() 方法之前
通常在構造器中通過 start() 啟動線程並不是好主意
線程會以以下三種方式之一結束
線程到達其 run() 方法的末尾
線程拋出一個未捕獲到的 Exception 或 Error
另一個線程調用一個棄用的 stop() 方法
當 Java 程序中的所有線程都完成時
Thread API 包含了等待另一個線程完成的方法
Thread
除了何時使用 Thread
在以下的簡單示例中
public class TwoThreads {
public static class Thread
public void run() {
System
System
}
}
public static class Thread
public void run() {
System
System
}
}
public static void main(String[] args) {
new Thread
new Thread
}
}
我們並不知道這些行按什麼順序執行
A
A
A B
不僅不同機器之間的結果可能不同
Thread API 包含了一個 sleep() 方法
如果線程是由對 Thread
Thread
CalculatePrimes 示例使用了一個後台線程計算素數
我們提到過當 Java 程序的所有線程都完成時
這些系統線程稱作守護程序線程
任何線程都可以變成守護程序線程
在這個示例中
/**
* Creates ten threads to search for the maximum value of a large matrix
* Each thread searches one portion of the matrix
*/
public class TenThreads {
private static class WorkerThread extends Thread {
int max = Integer
int[] ourArray;
public WorkerThread(int[] ourArray) {
this
}
// Find the maximum value in our particular piece of the array
public void run() {
for (int i =
max = Math.max(max, ourArray[i]);
}
public int getMax() {
return max;
}
}
public static void main(String[] args) {
WorkerThread[] threads = new WorkerThread[10];
int[][] bigMatrix = getBigHairyMatrix();
int max = Integer.MIN_VALUE;
// Give each thread a slice of the matrix to work with
for (int i=0; i < 10; i++) {
threads[i] = new WorkerThread(bigMatrix[i]);
threads[i].start();
}
// Wait for each thread to finish
try {
for (int i=0; i < 10; i++) {
threads[i].join();
max = Math.max(max, threads[i].getMax());
}
}
catch (InterruptedException e) {
// fall through
}
System.out.println("Maximum value was " + max);
}
}
9、小結
就象程序一樣,線程有生命周期:它們啟動、執行,然後完成。tw.wInGwit.cOm一個程序或進程也許包含多個線程,而這些線程看來互相單獨地執行。
線程是通過實例化 Thread 對象或實例化繼承 Thread 的對象來創建的,但在對新的 Thread 對象調用 start() 方法之前,這個線程並沒有開始執行。當線程運行到其 run() 方法的末尾或拋出未經處理的異常時,它們就結束了。
sleep() 方法可以用於等待一段特定時間;而 join() 方法可能用於等到另一個線程完成。
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27530.html