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è)置一個名稱