• sleep和wait的区别


    sleep和wait的区别有:
    1,这两个方法来自不同的类分别是Thread和Object
    2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
    3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
    synchronized(x){
    x.notify()
    //或者wait()
    }
    4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

    关于wait()暂停的是持有锁的对象,所以想调用wait()必须为:对象.wait();

    notify()唤醒的是等待锁的对象,调用:对象.notify();

    如下:

    Object obj = newObject();

    synchronized(obj){

        try{  

          obj.wait();

          }catch(Exception e){}

          obj.notify();

      }

    注意:wait(),notify(),notifyAll()都必须使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用在同步中,因为只有同步 才具有锁。

    为什么这些操作线程的方法要定义在object类中呢?

    简单说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()和notify();所以wait和notify属于Object。

    专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。

    也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中。

  • 相关阅读:
    FileReader读数据
    FileWriter写数据
    装饰者设计模式
    数据库连接池
    事务
    EL表达式
    console.log是异步的吗?
    使用i3wm时出现的若干问题的解决办法
    使用xmodmap修改键盘映射
    CentOS7 Minimal 安装后出现的若干问题解决办法
  • 原文地址:https://www.cnblogs.com/AndyAo/p/8120150.html
Copyright © 2020-2023  润新知