- 浏览: 289413 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- linux (31)
- java (144)
- mysql (52)
- html (19)
- oracle (8)
- sql (12)
- 无题 (5)
- js (16)
- android (4)
- tomcat (4)
- struts (2)
- spring (12)
- elcipse (2)
- shell (7)
- interview (2)
- redis (6)
- apache (2)
- maven (10)
- mq (6)
- kengen (0)
- windows (3)
- css (1)
- nginx (2)
- google (1)
- zk (1)
- ibm (1)
- git (1)
- mvn (1)
- jms (1)
- uml (1)
最新评论
java Object 类中 notify() ,notifyAll() ,wait()
Java Monitor 从两个方面来支持线程之间的同步,即:互斥执行与协作。 Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集上的线程互斥执行 , 使用 notify/notifyAll/wait 方法来协同不同线程之间的工作。这些方法在 Object 类上被定义,会被所有的 Java 对象自动继承。
实质上,Java 的 Object 类本身就是监视者对象,Java 语言对于这样一个典型并发设计模式做了内建的支持。不过,在 Java 里,我们已经看不到了我们在 C++ 一节所讨论的区域锁与条件变量的概念。下图很好地描述了 Java Monitor 的工作机理。
线程如果获得监视锁成功,将成为该监视者对象的拥有者。在任一时刻内,监视者对象只属于一个活动线程 (Owner) 。拥有者线程可以调用 wait 方法自动释放监视锁,进入等待状态。
1. wait() 方法:
要调用一个对象的wait()方法,只有当前线程获取了这个对象的锁,换句话说一定要在这个对象的同步方法或以这个对象为参数的同步块中.当一个线程调用了wait() 方法后,这个线程就进入了这个对象的休息室(waitset),这是一个虚拟的对象,但JVM中一定存在这样的一个数据结构用来记录当前对象中有哪些程线程在等待。然后它就会释放锁,让其它线程来获取这个锁.
这个线程只能等待其它线程调用notity[All]来唤醒.
但是如果调用的是有参数的wait(time)方法,则线程会在休息室中等待这个时间后自动唤醒.
class Test{
public synchornized void test(){
//获取条件,int x 要求大于100;
while(x < 100) // 注意这里是while 每次被唤醒后,还是要检查条件是否满足
wait();
perform(); // 执行操作
}
}
2. notify() notifyAll() 方法:
这两个方法都是把某个对象上休息区内的线程唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll则唤醒这个对象上的休息室中所有的线程.
一般为了保险起见,我们在绝对多数时候应该使用notifiAll(),除非你明确知道只唤醒其中的一个线程.
Java Monitor 从两个方面来支持线程之间的同步,即:互斥执行与协作。 Java 使用对象锁 ( 使用 synchronized 获得对象锁 ) 保证工作在共享的数据集上的线程互斥执行 , 使用 notify/notifyAll/wait 方法来协同不同线程之间的工作。这些方法在 Object 类上被定义,会被所有的 Java 对象自动继承。
实质上,Java 的 Object 类本身就是监视者对象,Java 语言对于这样一个典型并发设计模式做了内建的支持。不过,在 Java 里,我们已经看不到了我们在 C++ 一节所讨论的区域锁与条件变量的概念。下图很好地描述了 Java Monitor 的工作机理。
线程如果获得监视锁成功,将成为该监视者对象的拥有者。在任一时刻内,监视者对象只属于一个活动线程 (Owner) 。拥有者线程可以调用 wait 方法自动释放监视锁,进入等待状态。
1. wait() 方法:
要调用一个对象的wait()方法,只有当前线程获取了这个对象的锁,换句话说一定要在这个对象的同步方法或以这个对象为参数的同步块中.当一个线程调用了wait() 方法后,这个线程就进入了这个对象的休息室(waitset),这是一个虚拟的对象,但JVM中一定存在这样的一个数据结构用来记录当前对象中有哪些程线程在等待。然后它就会释放锁,让其它线程来获取这个锁.
这个线程只能等待其它线程调用notity[All]来唤醒.
但是如果调用的是有参数的wait(time)方法,则线程会在休息室中等待这个时间后自动唤醒.
class Test{
public synchornized void test(){
//获取条件,int x 要求大于100;
while(x < 100) // 注意这里是while 每次被唤醒后,还是要检查条件是否满足
wait();
perform(); // 执行操作
}
}
2. notify() notifyAll() 方法:
这两个方法都是把某个对象上休息区内的线程唤醒,notify只能唤醒一个,但究竟是哪一个不能确定,而notifyAll则唤醒这个对象上的休息室中所有的线程.
一般为了保险起见,我们在绝对多数时候应该使用notifiAll(),除非你明确知道只唤醒其中的一个线程.
发表评论
-
adfasdfsdf
2017-03-23 08:38 464package com.twsz.creative.elv ... -
经典技术书籍
2016-12-08 11:00 377这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统 ... -
分割字符串
2016-11-18 18:57 466@Test public void test2() { ... -
BD音乐部分接口
2016-11-15 15:45 631歌曲ID 详细信息接口:http://tingapi.ti ... -
限速器
2016-09-30 16:28 449package test.date; import ... -
Maven SCOPE
2016-09-29 23:34 352在Maven的依赖管理中, ... -
Twitter snowFlake
2016-09-19 22:22 375package com.netty.test.netty4 ... -
Spring BOOT生成web项目
2016-08-29 17:46 751https://github.com/spring-pro ... -
获取IP地址
2016-08-29 17:31 547import java.net.Inet4Address; ... -
Java Performance Tuning Guide
2016-08-29 15:14 278http://java-performance.info/ ... -
Nexus
2016-08-26 00:51 3742、创建解压目录,并将apache-maven-3.0-b ... -
Chain
2016-08-25 12:25 309public static void main(Strin ... -
Spring Boot
2016-08-23 12:50 481package com; import org.sp ... -
JAVA Seriesization
2016-08-16 15:28 475http://www.th7.cn/Program/And ... -
字节码
2016-08-12 19:42 437http://www.blogjava.net/libin ... -
回调在JSMTemplate的位置
2016-08-11 21:55 292package test; public class ... -
原生activeMQ支持
2016-08-10 20:40 388http://www.cnblogs.com/xwdrea ... -
activeMQ
2016-08-09 13:06 359http://www.open-open.com/lib/ ... -
logback
2016-08-05 10:45 436logback logback.xml常用配置详解(二)& ... -
uml
2016-08-03 21:32 326UML建模语言7种图(以银行ATM系统为例) http: ...
相关推荐
以下是对java中Object.wait()与Object.notify()的用法进行了详细的分析介绍,需要的朋友可以过来参考下
1. Thread.sleep() 和 Object.wait() Thread.sleep() 和 Object.wait() 都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception) ,对于非运行时异常(checked exception...
tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安全隐患,可被恶意攻击
主要介绍了java Object wait方法详细介绍的相关资料,需要的朋友可以参考下
IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.... 3.... 4....对象等待中,Object.wait() 7.阻塞,Blocked(重点关注) 8.停止,Parked
重入锁ReentrantLock 相对来说是synchronized、Object.wait()和Object.notify()方法的替代品(或者说是增强版),在JDK5.0的早期版本,重入锁的性能远远好于synchronized,但从JDK6.0开始,JDK在synchronized上做了...
前提 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 本文将使用命令awk将具有某个关键字的段落提取出来。... at java.lang.Object.wait(Native Method) - waiting on <0x00000000d670
Java SE5 and SE6 .................. 2 Java SE6 ......................................... 2 The 4th edition........................ 2 Changes .......................................... 3 Note on the ...
主要介绍了Java 中Object的wait() notify() notifyAll()方法使用的相关资料,需要的朋友可以参考下
But Wait! There's More! Chapter 2. Basic Network Concepts Section 2.1. Networks Section 2.2. The Layers of a Network Section 2.3. IP, TCP, and UDP Section 2.4. The Internet Section 2.5. ...
这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中...
创建了几个 String Object? 二者之间有什么区别? ......................................................................................................................................... 24 34、String ...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
这个源码资源是关于Java中的Object类的讲解案例代码。Object类是所有Java类的根类,它定义了一些常用的方法,例如equals()、hashCode()、toString()等。本案例代码将详细展示Object类的使用方法,并提供一些实际场景...
There is extensive coverage of new Java 9 features, such as the new layout of the modular JDK/JRE runtime image, new convenience factory methods for creating collections, the new spin-wait hints ...
Object C. Thread D. Frame E. 示例 第4题 【单选题】【2.00分】【概念理解】 若要将一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口 [单选题] * A. Runnable B. ActionListener C. WindowsAdapter ...
非流类(正确答案) java中用于创建文件对象的类是() [单选题] * A.File(正确答案) B.Object C.Thread D.Frame 若要将一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口() [单选题] * A....
40、在Java中wait和seelp方法的不同 41-50题 41、谈谈wait/notify关键字的理解 42、什么导致线程阻塞?线程如何关闭? 43、如何保证线程安全? 44、如何实现线程同步? 45、线程间操作List 46、谈谈对...