下面是一段简单的java多线程代码
public static void main(String[] args) throws Exception {
final Object lock="";
Thread t1=new Thread(){
public void run(){
try {
System.out.println("t1 wait begin");
synchronized (lock) {
lock.wait();
}
System.out.println("t1 wait end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
Thread.sleep(5000);
System.out.println("main lock begin");
synchronized (lock) {
lock.notify();
Thread.sleep(10000);
System.out.println("main wait begin ");
lock.wait();
System.out.println("main wait end");
}
System.out.println("main lock end");
t1.join();
System.out.println("process exist");
}
输出:
t1 wait begin
main lock begin
main wait begin
t1 wait end
描述:
线程t1获取lock对象的监视器后,马上调用lock的wait方法,放弃了lock的监视器,
主线程获取lock对象的监视器后,调用lock的notify方法唤醒等待lock的监视器的线程(这里是t1)
之后睡眠10秒,然后调用lock的wait方法放弃lock的监视器。
结论:
1、wait,notify,notifyAll必须在当前线程获得监视器时才能调用,即这些方法必须在同步块中才能调用
2、t1线程,wait方法执行时,t1线程放弃lock对象的监视器,t1线程阻塞,导致同步块代码未执行完。
3、主线程中notify方法执行时,主线程唤醒在等待lock对象监视器的线程(随机的,t1线程只是被标记为可获取监视 器,但实际未获取,详情请看4),另外此方法并不阻塞而是立即返回。
4、主线程notify方法执行后,主线程仍然具有lock对象的监视器,而t1线程仍处于阻塞状态(虽然已经被主线程notify 了), 这点可以看代码,主线程睡眠10秒,而t1线程仍阻塞。只有当主线程调用wait方法,放弃lock的监视器后,
t1线程才真正获得监视器,接着主线程阻塞,而t1线程继续执行同步块中未执行的代码
5、因没有任何线程调用notify方法呼唤主线程了,所以主线程一直阻塞
分享到:
相关推荐
以【走一步再走一步】为例探究以小见大手法的运用.doc
通过介结WebKit中使用的两个小的技术点,来展示一些设计概念。
作文如何“以小见大”.pdf
以小见大、以点带面写作技巧材料.doc
以小见大 无线宽带路由器功耗对比.pdf
经典编程【以小见大】900例C语言 各种C语言的小程序
以小见大的作文经典范例 (1).doc
本例子很好的很简单的解释了单片机的点阵显示原理 ,能以小见大 很典型
“大数据—小数据”问题:以小见大的洞察_陈国青.caj
以小见大培养学生创新意识与创新思维——“Atmega16单片机”编程教学的体会.pdf
体育产业周报-本周聚焦:以小见大,从NBA全明星赛看全球运动品牌营销的“军备竞赛”-200225.rar
经典编程900例(C语言) 涵盖ARRAYS,CMD_LINE,DATETIME,DOS_BIOS,FILES,FUNCTION,KEYBOARD,MACROS,MATH,MEMORY,STRINGS的实例说明。
C语言实现的唱片管理系统,意在以小见大,将现有的前沿技术和架构慢慢的在该系统中实现。 包括但不限于:本地文件、数据库、CS架构、redis、container、serverless、分布式等.zip 项目资源具有较高的学习借鉴价值,...
体育产业周报-本周聚焦:以小见大,从NBA全明星赛看全球运动品牌营销的“军备竞赛”-200225.pdf
QT 源码 向文本框中插入文本,一次一行 比较简单。程序比较简单,但是,以小见大,你可以发现QT中界面设计都是一样的,
本文实例为大家分享了C++实现简单通讯录的具体代码,供大家参考,具体内容如下 说明: 1 程序中运用到两个类,一个是Person类,另一个是List类。前者存储用户信息,后者主要用于操作,如增删改查等。但由于本程序中...
C函数指针分析 用一个简单的实例,分析函数指针的实质。以小见大。
采用eclipse软件编写,只需导入项目即可,数据库在项目里面的data文件夹下。简单易懂,通过这个小例子,以小见大,很容易就理解mvc模式
21世纪是信息的时代,主导21世纪的革命被认为是信息革命。我们每天都在受到信息的影响,小到娱乐八卦大到国防科技。物体与物体之间的联系更加紧密...在这里,我们以小见大,以智能安防为例,简单阐释物联网的具体应用。
要求概述: 1、论文应在指导老师的指导下独立完成...4、鼓励在已公布选题的基础上进一步细分研究对象,希望能从自己实际工作出发,在写作中以小见大,并用案例和数据分析支撑文章的基本观点,切忌空话连篇、大而无当。