1. 程式人生 > >thread和runable的區別

thread和runable的區別

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());