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開啟一個新的線程去運行當(dāng)前Thread類的run()接口潮秘。
簡單畫個圖理解就是
線程
run相當(dāng)于再main線程中調(diào)用了一個普通的方法
而start則在另外開一個線程去運行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è)置一個名稱