[JAVA灵魂10问]关于sleep与wait的思考

[JAVA灵魂10问]关于sleep与wait的思考

[JAVA灵魂10问]访问权限的拷问:你懂的怎么使用clone吗
[JAVA灵魂10问]你知道java的重写吗?

写在前面的话

一说到sleep和wait的区别,最先想到是的
1.时间 sleep可以设置时间,wait一般不设置时间需要唤醒
2.对象锁 sleep不释放对象锁,而wait释放对象锁

sleep和wait的核心区别

sleep方法是静态的
** wait是成员方法**

sleep

关于sleep在java源码中只有简单的一句话

public static native void sleep(long millis) throws InterruptedException;

从这句话看到sleep是静态的,
静态方法和类型相关,和成员无关
所以说,sleep方法属于谁调用就去休眠谁。
下面看这样一段代码

public class JavaSleep {
    public static void main(String[] args) throws Exception {
Thread t1 = new Thread();
t1.start;
t1.sleep(1000);
	}
}

这里我们发出一个疑问,在这段代码中休眠的是谁?
如果你能理解上面那句话,这里就会知道,上面的那段sleep与t1没有任何关系!
因为t1是一个对象,而sleep又与对象无关。所以sleep不可能让t1休眠。
那么,这段代码中的sleep让谁休眠了?
这个sleep是让当前正在执行的线程休眠,哪一个线程调用了sleep,休会休眠那个线程。
所以,这个sleep会让main休眠

wait

public final void wait() throws InterruptedException {
        wait(0);
    }

wait并没有用static修饰,所以wait是对象方法没有对象有关。

public class JavaWait {
    public static void main(String[] args) throws Exception {
        Thread t2 = new Thread();
        t2.start;
        t2.wait;

所以这段代码中的wait会让t2去等待

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值