答案:Missed NotificationA missed notification occurs when threadB tries to notify threadA, but threadA is not yet waiting for the notification. In a multithreaded environment like Java, you don’t have much control over which thread runs and for how long. This uncertainty can lead to a situation in which most of the time an application is run, threadA is waiting before threadB does the notification. But occasionally, threadB does the notification before threadA is waiting. This missed notification scenario can be quite dangerous.Missed Notification指:线程B试图通知线程A,但线程A并没有在等待通知。这并不是不可能出现的。在多线程环境中,我们不能控制哪个线程执行,执行多长时间,这种不确定有可能导致在一个线程等待之前就先行通知,这是一种很危险的情况。如下程序会出现这种情况:/** Created on 2005-7-14** Java Thread Programming - Paul Hyde* Copyright ? 1999 Sams Publishing* Jonathan Q. Bo 学习笔记**/package org.tju.msnrl.jonathan.thread.chapter8;/*** @author Jonathan Q. Bo from TJU MSNRL** Email:jonathan.q.bo@gmail.com* Blog:blog.csdn.net/jonathan_q_bo* blog.yesky.net/jonathanundersun** Enjoy Life with Sun!**/public class MissedNotify {private Object proceedLock;public MissedNotify(){proceedLock = new Object();}public void waitProceed() throws InterruptedException{print("in waitProceed() - begin");synchronized(proceedLock){print("begin synchronized wait ...");proceedLock.wait();print("end synchronized wait ...");}print("in waitProceed() - end");}public void notifyProceed(){print("in notifyProceed() - begin");synchronized(proceedLock){print("begin synchronized notify ...");proceedLock.notifyAll();print("end synchronized notify ...");}print("in notifyProceed() - end");}public static void print(String msg){String temp = Thread.currentThread().getName();System.out.println(temp + " - " + msg);}public static void main(String[] args) {final MissedNotify mn = new MissedNotify();Runnable runA = new Runnable(){public void run(){try{Thread.sleep(1000);//wait()后执行mn.waitProceed();}catch(InterruptedException e){e.printStackTrace();}}};Thread threadA= new Thread(runA,"threadA");threadA.start();Runnable runB = new Runnable(){public void run(){try{Thread.sleep(500);//notify()先执行mn.notifyProceed();}catch(InterruptedException e){e.printStackTrace();}}};Thread threadB = new Thread(runB,"threadB");threadB.start();try{Thread.sleep(10000);}catch(InterruptedException e){}print("interrupt thread A ...");threadA.interrupt();}}输出结果:threadB - in notifyProceed() - beginthreadB - begin synchronized notify ...threadB - end synchronized notify ...threadB - in not上一个:Java Thread Programming 1.8.3 - Inter-thread Communication
下一个:Java Thread Programming 1.8.1 - Inter-thread Communication
- 更多JSP疑问解答:
- jsp新手求指导,不要笑!
- 如何让一个form提取的值传递给多个jsp?
- DW中,新建的html页面能否有jsp或php代码?
- jsp 如何限制表单,实现只能填写特定的数据。
- jsp 和javabean结合的程序有问题
- 从数据库里取出的数据如何传递到另外的jsp页面中
- 你好,ext嵌入那个jsp页面,是不是还需要加上一些插件啊,不太懂,麻烦你了。
- JSP不能处理所有问题吗?还要来一大堆的TLD,TAG,XML。为JSP 非要 Servlet 不可吗?
- 光标离开时全角转半角在jsp中怎么实现
- jsp 页面 打开 pdf 文件 控制大小 和 工具栏 能发份源码么 谢啦
- jsp页面点保存按钮,运行缓慢,弹出对话框提示
- jsp刷新页面如何不闪屏
- jsp 与html 的交互问题?
- jsp小数显示问题 例如 我在oracle 数据库中查询出来的是 0.01 但是在jsp页面上就显示成 .01 没有前面的0
- jsp中日历控件