博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java线程学习之wait方法
阅读量:4971 次
发布时间:2019-06-12

本文共 1491 字,大约阅读时间需要 4 分钟。

wait 等待方法是让线程进入等待队列,使用方法是 obj.wait(); 这样当前线程就会暂停运行,并且进入obj的等待队列中,称作“线程正在obj上等待”。

如果线程想执行 wait 方法,线程必须拥有锁。如果线程进入等待队列,就会释放其实例的锁。

有两种形式的wait方法

   一种是:接受毫秒数作为参数,含义与sleep中方法里接受参数的意思相同,都是指“在此期间暂停”,但是与sleep方法不同的是,wait 在暂停等待期间,对象锁是释放的,而sleep是拥抱着这把锁;还有一点不同的是,wait方法可以通过notify,notifyAll或者等待的时间到期,都可以令此线程接着执行。(时间参数值必须大于0,如果小于0,则会抛出 如果时间参数为0 ,则会一直等待下去)

                       在接收参数的wait方法中,有两种分别是:

public final void wait(long timeout) throws
public final void wait(long timeout,int nanos)throws
1  public final void wait(long timeout, int nanos) throws InterruptedException { 2         if (timeout < 0) { 3             throw new IllegalArgumentException("timeout value is negative"); 4         } 5  6         if (nanos < 0 || nanos > 999999) { 7             throw new IllegalArgumentException( 8                                 "nanosecond timeout value out of range"); 9         }10 11         if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {12             timeout++;13         }14 15         wait(timeout);16     }
wait(long timeout, int nanos)在Object中的显示

 

另一种是:wait 方法不接受任何参数,这种wait(),将无限等待下去,直到线程接收到nofity或者notifyAll的通知信息,才能继续执行。

摘自JDK 的API:

在没有被通知、中断或超时的情况下,线程还可以唤醒一个所谓的虚假唤醒 (spurious wakeup)。虽然这种情况在实践中很少发生,但是应用程序必须通过以下方式防止其发生,即对应该导致该线程被提醒的条件进行测试,如果不满足该条件,则继续等待。换句话说,等待应总是发生在循环中,如下面的示例:

synchronized (obj) {while (
)obj.wait(timeout);... // Perform action appropriate to condition }

如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除,就会抛出中断异常

转载于:https://www.cnblogs.com/songlove/p/10628679.html

你可能感兴趣的文章
[Locked] Wiggle Sort
查看>>
deque
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
SQLite移植手记1
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
iPhone在日本最牛,在中国输得最慘
查看>>
动态方法决议 和 消息转发
查看>>