多線程與高并發(fā)(一):正確使用Thread

1.創(chuàng)建一個線程

Thread t = new Thread(()->{
  System.out.println("run by thread")
})

這里使用了Lambda 表達(dá)式,等同于

Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("run in thread");
            }
        });

2.使用

t.start();
t.run();

注意 這兩種使用方式是有區(qū)別的,start方法是真正的啟動一個線程去執(zhí)行Runnable里面的run方法,
但是run()不是,run方法是讓當(dāng)前線程去執(zhí)行run里面的方法。
我們知道Runnable是一個接口,接口里面只定義了一個run方法。真正實現(xiàn)多線程的是Thread類的start()方法,其實Thread類也實現(xiàn)Runnable接口所以Thread.run其實也是調(diào)用了Runnable的run()的方法。
而start()方法會通知JVM開啟一個新的線程去運(yùn)行當(dāng)前Thread類的run()接口。

簡單畫個圖理解就是


線程

run相當(dāng)于再main線程中調(diào)用了一個普通的方法
而start則在另外開一個線程去運(yùn)行run方法 main線程還能繼續(xù)往下執(zhí)行
來段代碼

package com.steve.thread;

public class Thread1 {

    public static void main(String[] args) {
        Thread t  = new Thread(()->{
            System.out.println(Thread.currentThread().getName());
        });
        t.setName("Thread-1");
        
        t.start();
        //t.run();
    }

}

大家可以自行去執(zhí)行驗證下run和start的區(qū)別。t.setName()表示給線程Thread設(shè)置一個名稱

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容