首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

对Object中的notofy跟wati方法的理解

2013-02-18 
对Object中的notofy和wati方法的理解Object中提供了5个方法来支持线程间的协作。它们都是public 和 final的

对Object中的notofy和wati方法的理解

Object中提供了5个方法来支持线程间的协作。它们都是public 和 final的。因此所有的类都有该5种方法,并且不能被复写(其实现为本地代码)。

另外需要注意的是这些方法必须出现在同步语句块或者同步方法中。否则会抛出IllegalMoniterStateException异常。

对于notify而言,虚拟机会随机唤醒等待区中的一个线程(如果等待区没有线程,则什么也不做)。

对于notifyAll而言,虚拟机会唤醒全部线程(如果等待区没有线程,则什么也不做)。

对于wait而言,该线程(已经拥有对象或者类的锁)会主动放弃对象或者类锁,进入等待区,等待其它线程唤醒。

对于wait(long timeout)而言,该线程(已经拥有对象或者类锁)会主动放弃对象或者类锁,进入等待区,如果在给定毫秒时间内没有被其它线程唤醒,则在规定时间到时,虚拟机会自动唤醒该进程。

对于wait(long timeout,int nanos)而言,它和上面那个方法类似,只不过唤醒时间多了个纳秒时间。

如果一个同步方法或者同步语句块返回或者抛出异常,都会释放掉锁。

对于进入等待区的线程来说,要使它正常结束,必须要被唤醒,然后执行监视区域的内容,最后离开监视区域。所以如果在同步方法或者同步语句块中调用了无参的wait方法,且没有其它线程对其唤醒,那么该线程永远也不会结束。因此该程序的虚拟机实例会永远运行着。就感觉死循环一样。

热点排行