美文网首页
多线程与高并发(一):正确使用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