thread和runable的區別
阿新 • • 發佈:2018-12-30
1.runable我實驗了一下,同時new了3個LiftOff,他們還是按照順訊打印出來的,且執行緒名都是main,執行緒id也相同。說明直接用run方法是借用主執行緒來執行程式的,且會排隊來執行。程式碼比較長,但是我沒找到csdn有程式碼摺疊功能,知道如何摺疊的朋友可以留評論賜教一下哈。
package com.runnablethreads.gc;
public class LiftOff implements Runnable{
public LiftOff(){
System.out.println("thread constructor");
}
public void run(){
Thread thread = Thread.currentThread();
for(int i = 0;i<3;i++){
System.out.println("new thread"+i);
System.out.println("Thread Id: " + thread.getId());
System.out.println("Thread Name: " + thread.getName());
Thread.yield();
}
System.out.println("over" );
}
}
package com.runnablethreads.gc;
public class MainThread {
public static void main(String[] args){
//for(int i = 0; i <5; i++){
//new Thread(new LiftOff()).start();
//}
LiftOff l1=new LiftOff();
l1.run();
LiftOff l2=new LiftOff();
l2.run();
LiftOff l3=new LiftOff();
l3.run();
}
}
結果:
thread constructor
new thread0
Thread Id: 1
Thread Name: main
new thread1
Thread Id: 1
Thread Name: main
new thread2
Thread Id: 1
Thread Name: main
over
thread constructor
new thread0
Thread Id: 1
Thread Name: main
new thread1
Thread Id: 1
Thread Name: main
new thread2
Thread Id: 1
Thread Name: main
over
thread constructor
new thread0
Thread Id: 1
Thread Name: main
new thread1
Thread Id: 1
Thread Name: main
new thread2
Thread Id: 1
Thread Name: main
over
2.thread我也實驗了一下(new Thread(new LiftOff()).start();)同時new多個會並行,且執行緒名不同。
3.Runnable是一個介面,而Thread是一個類。runnable實現了介面還可以繼承另一個不同的類,而thread不行。(think in java P666)
4.join方法(例子在thinkinjava P670) —A的run方法裡面謝了呼叫B.join()的方法。則若A執行到B.join()則會掛起等待B的執行緒執行完畢後加入b的執行緒繼續執行接下來的程式碼。
5呼叫A.interrupt會打斷try catch裡的程式碼,執行接下來的程式碼,執行完畢之後,B.join()可以順利執行
ps:列印執行緒號小技巧:
Thread thread = Thread.currentThread();System.out.println(“new thread”+i);
System.out.println(“Thread Id: ” + thread.getId());
System.out.println(“Thread Name: ” + thread.getName());