【线程】Object.wait 内部原理(二)

我的原则:先会用再说,内部慢慢来


Object.wait

一、 作用

  1. wait 的作用是啥:让出当前锁住的对象,让别的线程跑完再来弄我的线程。

二、 注意点

  1. 记住锁是锁对象,不是锁住线程
  2. Join 方法是 Thread对象的,wait方法是 Object 对象的,Join的底层实现是 wait
  3. wait方法的使用必须在同步的范围内,否则就会抛出 IllegalMonitorStateException 异常.
  4. wait方法的作用就是阻塞当前线程等待notify/notifyAll方法的唤醒,或等待超时后自动唤醒。
  5. 底层就是 ObjectMonitor 对象释放了当前对象A,丢到 waitSet 区域去,然后重新锁住了其他的对象。

三、demo

万物皆对象,人在做天在看。线程Thread 在抢锁,ObjectMonitor在看。

代码:

public class _02_00_WaitTest {
   
	// 注意这里的 synchronzied,待会去掉。
    public synchronized void testWait(){
   
        System.out.println(Thread.currentThread().getName() + ", Start-----");
        try {
   
            wait(3000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + ", End-------");
    }

    public static void main(String[] args) throws Exception{
   
        final _02_00_WaitTest test = new _02_00_WaitTest();
        System.out.println("Main begin...");
        Thread.sleep(200); // 停顿的目的都是为了保证打印的顺序
        new Thr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值