多线程与高并发(一):正确使用Thread

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设置一个名称

你可能感兴趣的:(多线程与高并发(一):正确使用Thread)