知识大全 Java编程语言中notify和wait的具体应用
Posted 知
篇首语:知识就是力量,时间就是生命。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java编程语言中notify和wait的具体应用相关的知识,希望对你有一定的参考价值。
Java编程语言中notify和wait的具体应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java编程语言在应用的时候需要我们不断的进行相关知识的学习 首先我们先要理解notify()和wait() 只有理解了这个语句才能更好的进行相关的应用 希望大家有所收获 为什么在前几天纪录线程的时候没有纪录这两个方法呢 因为这两个方法本来就不属于Thread类 而是属于最底层的object基础类的 也就是说不光是Thread 每个对象都有notify和wait的功能 为什么?因为他们是用来操纵锁的 而每个对象都有锁 锁是每个对象的基础 既然锁是基础的 那么操纵锁的方法当然也是最基础了 按照Think in Java中的解释: wait()允许我们将线程置入 睡眠 状态 同时又 积极 地等待条件发生改变 而且只有在一个notify()或notifyAll()发生变化的时候 线程才会被唤醒 并检查条件是否有变 我们来解释一下这句话 wait()允许我们将线程置入 睡眠 状态 也就是说 wait也是让当前线程阻塞的 这一点和sleep或者suspend是相同的 那和sleep suspend有什么区别呢? 区别在于 (wait)同时又 积极 地等待条件发生改变 这一点很关键 sleep和suspend无法做到 因为我们有时候需要通过同步(synchronized)的帮助来防止线程之间的冲突 而一旦使用同步 就要锁定对象 也就是获取对象锁 其它要使用该对象锁的线程都只能排队等著 等到同步方法或者同步块里的程序全部运行完才有机会 在同步方法和同步块中 无论sleep()还是suspend()都不可能自己被调用的时候解除锁定 他们都霸占著正在使用的对象锁不放 而wait却可以 它可以让同步方法或者同步块暂时放弃对象锁 而将它暂时让给其它需要对象锁的人(这里应该是程序块 或线程)用 这意味着可在执行wait()期间调用线程对象中的其他同步方法!在其它情况下(sleep啊 suspend啊) 这是不可能的 但是注意我前面说的 在Java编程语言中只是暂时放弃对象锁 暂时给其它线程使用 我wait所在的线程还是要把这个对象锁收回来的呀 wait什么?就是wait别人用完了还给我啊!好 那怎么把对象锁收回来呢? 第一种方法 限定借出去的时间 在wait()中设置参数 比如wait( ) 以毫秒为单位 就表明我只借出去 秒中 一秒钟之后 我自动收回 第二种方法 让借出去的人通知我 他用完了 要还给我了 这时 我马上就收回来 哎 假如我设了 小时之后收回 别人只用了半小时就完了 那怎么办呢?靠!当然用完了就收回了 还管我设的是多长时间啊 那么别人怎么通知我呢?相信大家都可以想到了 notify() 这就是最后一句话 而且只有在一个notify()或notifyAll()发生变化的时候 线程才会被唤醒 的意思了 因此 我们可将一个wait()和notify()置入任何同步方法或同步块内部 无论在那个类里是否准备进行涉及线程的处理 而且实际上 我们也只能在同步方法或者同步块里面调用wait()和notify() 这个时候我们来解释上面的程序 简直是易如反掌了 synchronized(b) 在Java编程语言中的意思是定义一个同步块 使用b作为资源锁 b wait();的意思是临时释放锁 并阻塞当前线程 好让其他使用同一把锁的线程有机会执行 在这里要用同一把锁的就是b线程本身 这个线程在执行到一定地方后用notify()通知wait的线程 锁已经用完 待notify()所在的同步块运行完之后 wait所在的线程就可以继续执行 cha138/Article/program/Java/hx/201311/25920相关参考
知识大全 JAVA - 线程之wait(), notify()实例
JAVA-线程之wait(),notify()实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!p
对于初学者来说下面这个例子是一个非常常见的错误 /** * 线程A循环次后等待并放弃锁让线程B执行 */ classThreadAextendsThread //线程同步的公共
Java多线程中wait语句的具体使用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Jav
知识大全 Java多线程notify¬ifyall的区别
Java多线程notify¬ifyall的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java中消除实现继承和面向接口的编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在匆忙之际
JAVA语言中链表和双向链表的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 链表是一种重要
Java编程语言中的口令屏蔽 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目前对于Java命令
Notify()和notifyall()的原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
Java编程语言中的return语句介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishix
Java编程语言中EJB技术的详细说明 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &