美文网首页
多线程与高并发(一):正确使用Thread

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

作者: SteveLaw1124 | 来源:发表于2020-03-11 10:52 被阅读0次

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

      本文链接:https://www.haomeiwen.com/subject/zwofjhtx.html