Object的wait和Thread的sleep

Object的wait()

wait()搭配notify(),nofityAll()使用。
线程获取到对象锁之后,执行wait()就会释放对象锁,同时线程挂起,直到其他线程获取到对象锁并执行notify()后,线程重新开始运行。

final static Object async = new Object();

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (async) {
                    System.out.println("thread a get async");
                    try {
                        System.out.println("thread a start wait");
                        async.wait();
                        System.out.println("thread a end wait");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (async){
                    System.out.println("thread b get async");
                    System.out.println("thread b notify async");
                    async.notify();
                }
            }
        }).start();
    }

输出:

thread a get async
thread a start wait
thread b get async
thread b notify async
thread a end wait

Thread.sleep()

线程获取到对象锁之后,sleep时不会释放对象锁,其他线程也不能获取到对象锁。直到线程sleep结束,其他线程才能获取到对象锁。

final static Object async = new Object();

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (async) {
                    System.out.println("thread a get async");
                    try {
                        System.out.println("thread a start sleep");
                        Thread.sleep(1000);
                        System.out.println("thread a end sleep");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (async) {
                    System.out.println("thread b get async");
                    System.out.println("thread b notify async");
                    async.notify();
                }
            }
        }).start();
    }

输出:

thread a get async
thread a start sleep
thread a end sleep
thread b get async
thread b notify async

转载于:https://www.cnblogs.com/jiy-for-you/p/7282042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值