• 技术文章 >java >java基础

    java中wait是什么意思

    小妮浅浅小妮浅浅2021-01-08 13:51:19原创3923

    我们在线程的使用中,一些暂时不处理的线程要放在其他区域,会使用wait的方法让其进行等待。目的是为了让等待的线程不与其它线程有所冲突,等别的方法调用后,再启用wait方法的线程。下面我们就wait方法的说明、语法、参数、返回值、使用注意、实例带来全面的分析。

    1.说明

    调用wait()方法后,线程会放到等待池当中,等待池的线程是不会去竞争同步锁。只有调用了notify()或notifyAll()后等待池的线程才会开始去竞争锁

    2.语法

    public final void wait()

    3.参数

    4.返回值

    没有返回值。

    5.使用注意

    1)必须在synchronized 修饰的同步代码块中调用

    2)会释放cpu资源和释放同步锁(类锁和对象锁)

    3)调用wait()后必须调用notify()或notifyAll()后线程才会从等待池进入到锁池,当我们的线程竞争得到同步锁后就会重新进入绪状态等待cpu资源分配

    4)是Object类的方法

    6.实例

        /**
         * 当前线程必须是该对象锁的拥有者
         *
         * @param timeout 要等待的最长时间 如果timeout为0,则必须被notify唤醒
         * @throws  IllegalArgumentException 如果超时值是负数,或者不在0-999999范围内
         * @throws  IllegalMonitorStateException 如果当前线程不是此对象锁的所有者
         * @throws  InterruptedException 如果当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程,抛出该异常并解除线程的中断状态
         */
     public final native void wait(long timeout) throws InterruptedException;
    /**
         * @param timeout 毫秒
         * @param nanos 微毫秒
         */
     public final void wait(long timeout, int nanos) throws InterruptedException {
     	if (timeout < 0) {
     	throw new IllegalArgumentException("timeout value is negative");
            }
            if (nanos < 0 || nanos > 999999) {
                throw new IllegalArgumentException(
                                    "nanosecond timeout value out of range");
            }
            if (nanos > 0) {
                timeout++;
            }
            wait(timeout);
        }
        
        public final void wait() throws InterruptedException {
            wait(0);
    }

    以上就是java中wait方法的使用,能够有效解决不同线程之间竞争锁的问题。作为object类的一种方法,在后面我们还会带来更多的内容分享。

    专题推荐:java,wait
    上一篇:java中Thread的停止 下一篇:java notify()的唤醒

    相关文章推荐

    • java线程和进程的关系有哪些• 线程在java中的通信• thread类在java线程中的使用• java守护线程应用• java中Thread的停止

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网