Java 多线程Thread类常用方法及面试小问题

今天就来聊一聊Thread 里面这个几个常用,或者比较常看见的这几个方法

Java 多线程Thread类常用方法及面试小问题_第1张图片

1. start() 方法

Java 多线程Thread类常用方法及面试小问题_第2张图片

上面是JAVA doc上面的,哈哈,其实就是 开启一个线程。但是不能重复开启同一个线程,不然就会报异常。里面还解释一个面试常见的问题答案。等文章最后我会给出的

2 run()方法

Java 多线程Thread类常用方法及面试小问题_第3张图片

当Thread类对象 ,调用start方法,创建一个线程。这个时候你就应该想,创建一个线程来干嘛的呀? 肯定是要执行一些的任务的嘛,所以这个run 方法就是 线程具体执行的任务内容。上面也指出了,使用这个方法是没有返回值的(这里就和实现Callable接口的call方法最大区别了)

3 sleep()方法

Java 多线程Thread类常用方法及面试小问题_第4张图片

线程休眠,这里只需记得一个点:它只是让出了CUP ,但是没有释放它所拥有的对象锁。当休眠时间到了,获得CUP就能立即执行了

4 wait() 方法

Java 多线程Thread类常用方法及面试小问题_第5张图片

线程休眠。这方法应该说不只属于Thread这个类。它是Object 类的,意思就是任何一个对象都有这个方法,但我为什么在这里拿出来呢,就是为了和上面的sleep方法做区别,这个wait方法一个特点就是:它被调用的时候不仅会让出CUP,还会释放所持有的对象锁。

5 join方法

Java 多线程Thread类常用方法及面试小问题_第6张图片

这个方法比较特殊,他是有特定场景才会使用到。它能用来保证多线程的执行顺序,场景:用户下单-送餐。必须是先下单才能送餐。Join方法就能解决这个问题了,这个时候只有等thread.join方法执行完,程序才会往下走。

public class Main {
     

    public static void main(String[] args) throws ExecutionException, InterruptedException {
     
        MultiThreadOne multiThreadOne = new MultiThreadOne();
        Thread threadOne = new Thread(multiThreadOne);// 用户下单
        Thread thread = new Thread(new Runnable() {
      // 送餐 (主线程)
            @Override
            public void run() {
     
                try {
     
                    // 用户下单
                    threadOne.join();
                    System.out.println("下单完成,我可以去送餐了");
                } catch (InterruptedException e) {
     
                    e.printStackTrace();
                }
            }
        });

    }
}

好了。几个常见的方法已经聊完了。现在来看看2个面试小问题:

问题1

start方法和run方法,哪一个是创建启动一个线程?

执行start方法才是创建开启一个线程。run方法是线程执行的内容。也就是执行start方法,新开的线程就会调用run方法。这里有人就会问:那怎么不直接调用run方法就好。单纯执行run方法相当于你在main方法里面调用了一个run的方法,和普通的方法调用没有什么区别,这里JVM里面只有一个main线程,但是如果使用的是start方法,是新开一个线程。也就是JVM里面就有两个线程(main线程和新创建的线程)。

问题2

wait 方法和sleep方法的区别?

  1. wait方法是Object的方法,sleep是Thread类的方法
  2. wait方法必须在同步代码块里面使用,不然会报异常。sleep方法可以在代码任何地方调用
  3. wait方法会释放对象锁,sleep不会释放对象锁

如果文章对你有帮助麻烦点个赞。如果对我感兴趣可以扫码关注我的公众号(Linlj_gzh),方便阅读查看,谢谢。
Java 多线程Thread类常用方法及面试小问题_第7张图片

你可能感兴趣的:(JAVA基础篇,java,多线程,面试,thread)