多线程与高并发(一):正确使用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设置一个名称

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容