※如何啟動執行緒
●自訂執行緒:
--繼承Thread
--覆寫public void run
public class ThreadTest extends Thread {
private String name;
public ThreadTest(String name) {
this.name = name;
}
@Override
public void run() {
for(int i = 0;i<10;i++){
System.out.print(name + "=" + i);
}
}
}
●執行緒由作業系統控管:
public class Test0610 {
public static void main(String[] args) {
ThreadTest t1 = new ThreadTest("T1");
ThreadTest t2 = new ThreadTest("T2");
//t1.setPriority(10); //優先較大
//t2.setPriority(1);
t1.start();
t2.start(); //交錯跑,由作業系統決定
}
}
Out:
未加優先權: T1=0 T1=1 T1=2 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9
有加優先權: T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9
public class ThreadTest extends Thread {
private String name;
public ThreadTest(String name) {
this.name = name;
}
@Override
public void run() {
for(int i = 0;i<10;i++){
System.out.print(name + "=" + i);
}
}
}
●執行緒由程式控管:
public class Test0610 {
public static void main(String[] args) {
ThreadTest t1 = new ThreadTest("T1");
ThreadTest t2 = new ThreadTest("T2");
try {
t1.join(); //會先等t1跑完
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Main Porgram Terminated"); //主程式會執行完
t1.run(); //沒有交錯跑,由程式決定
t2.run();
}
}
Out:
Main Porgram Terminated
T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9
●另一種自訂執行緒的方式
--implements Runnable
--覆寫public void run
public class ThreadTest implements Runnable {
private String name;
public ThreadTest(String name) {
this.name = name;
}
@Override
public void run() {
for(int i = 0;i<10;i++){
System.out.print(name + "=" + i + " ");
}
}
}
●配合 Runnable Interface啟動多執行緒
ThreadTest t1 = new ThreadTest("T1");
ThreadTest t2 = new ThreadTest("T2");
Thread test1 = new Thread(t1); //Runnable沒有start,所以必須先丟到Thread裡面
Thread test2 = new Thread(t2);
test1.start(); //由作業系統控制,會交錯
test2.start();
Out:
T1=0 T1=1 T1=2 T1=3 T1=4 T1=5 T1=6 T1=7 T1=8 T1=9 T2=0 T2=1 T2=2 T2=3 T2=4 T2=5 T2=6 T2=7 T2=8 T2=9
※總結:執行緒可以用 extends Thread 和 implements Runable,但在實務上,怕選錯父類別,所以還是會選擇Runable