1. 程式人生 > >執行緒Thread的t.start()實現的是非同步的執行緒,t.run()方法實現的是同步執行緒;

執行緒Thread的t.start()實現的是非同步的執行緒,t.run()方法實現的是同步執行緒;

package interview;

public class TestRun_Start extends Thread {
public static void main(String[] args) {

    TestRun_Start ta = new TestRun_Start();
    Thread t = ta.new TestThread2("新建執行緒1");
    {
        //啟動執行緒不一定就馬上執行
        t.start();
        System.out.println(currentThread() + "\t" + "1");
        //當實現介面的物件Runnable被用來建立一個執行緒,啟動執行緒使物件的run在獨立執行的執行緒中呼叫的方法。
        //方法run的一般合同是它可以採取任何行動。
        //直接呼叫執行緒類的run(),會被當做普通的函式呼叫,程式依舊是主執行緒,此時的run啟動的就是當前的執行緒main執行緒。
        //也就是說start()方法才能非同步呼叫run(),直接呼叫時同步的,無法達到多執行緒的目的;
        t.run();
        System.out.println(currentThread() + "\t" + "2");
    }
}

class TestThread2 extends Thread {
    public TestThread2(String n) {
        super(n);
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread() + "\t" + "3");
    }
}}

在這裡插入圖片描述

在這裡插入圖片描述