1.创建一个线程
Thread t = new Thread(()->{
System.out.println("run by thread")
})
这里使用了Lambda 表达式,等同于
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("run in thread");
}
});
2.使用
t.start();
t.run();
注意 这两种使用方式是有区别的,start方法是真正的启动一个线程去执行Runnable里面的run方法,
但是run()不是,run方法是让当前线程去执行run里面的方法。
我们知道Runnable是一个接口,接口里面只定义了一个run方法。真正实现多线程的是Thread类的start()方法,其实Thread类也实现Runnable接口所以Thread.run其实也是调用了Runnable的run()的方法。
而start()方法会通知JVM开启一个新的线程去运行当前Thread类的run()接口。
简单画个图理解就是
线程
run相当于再main线程中调用了一个普通的方法
而start则在另外开一个线程去运行run方法 main线程还能继续往下执行
来段代码
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();
}
}
大家可以自行去执行验证下run和start的区别。t.setName()表示给线程Thread设置一个名称
网友评论