java中wait的简单用法

java中wait的简单用法,第1张

最近刚学了多线程wait方法,这里简要的说明一下wait和sleep的区别

1.wait是属于Object类的方法,sleep是属于Thread类的方法;

2.使用wait的前提条件是必须拿到锁,sleep则没有此限制;

3.wait在不设置时间参数的情况下,何时会被唤醒主要取决于程序中同对象何时调用notify方法,而sleep等到时间一到就会继续去抢占系统资源;

4.wait会释放掉所得到的对象的锁,sleep只是会进入休眠状态,并不会释放自身所持有的对象锁

public class test {
    public static void main(String[] args) {
        Object object = new Object();
        new Thread(() -> {
            try {
                synchronized (object) {
                    object.wait();
                }
                System.out.println("sss");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

//        new Thread(() -> {
//            synchronized (object) {
//                object.notify();
//            }
//        }).start();
    }
}

上述代码的运行结果可知,对象调用wait方法之后就会处于阻塞状态。将不会再向下执行,即输出"sss";

public class test {
    public static void main(String[] args) {
        Object object = new Object();
        new Thread(() -> {
            try {
                synchronized (object) {
                    object.wait();
                }
                System.out.println("sss");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            synchronized (object) {
                object.notify();
            }
        }).start();
    }
}

当我们重新开一条线程,并将第一天怕线程唤醒之后,就可以正常的输出"sss"

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/2990385.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-09-23
下一篇2022-09-23

发表评论

登录后才能评论

评论列表(0条)

    保存