Java wait 方法和sleep方法的区别?,start方法和run方法,哪一个是创建启动一个线程?

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

1. start() 方法

在这里插入图片描述

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

2 run()方法

在这里插入图片描述

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

3 sleep()方法

在这里插入图片描述

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

4 wait() 方法

在这里插入图片描述

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

5 join方法

》

这个方法比较特殊,他是有特定场景才会使用到。它能用来保证多线程的执行顺序,场景:用户下单-送餐。必须是先下单才能送餐。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方法需要由notify或者allNotify来唤醒线程(需要再次获得锁),
    sleep方法就不用获得锁了,只要休眠时间到,获得cup立马就能继续执行
  4. wait方法会释放对象锁,sleep不会释放对象锁

如果文章对你有帮助麻烦点个赞。如果对我感兴趣可以扫码关注我的公众号(Linlj_gzh),方便阅读查看,谢谢。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memory_cood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值