黑马程序员技术交流社区
标题:
提问大神
[打印本页]
作者:
张东贤
时间:
2013-3-20 21:38
标题:
提问大神
本帖最后由 张东贤 于 2013-3-21 00:01 编辑
java中线程安全问题
为什么我的代码编译没问题,运行时出现illegalmonitorstateexception
代码没办法发,手机用户伤不起
作者:
黄玉昆
时间:
2013-3-20 22:31
帖子的题目最好不要发成这样的啊,最好明确你要问的问题关键字,这样别人看着也方便
作者:
HM朱蛟
时间:
2013-3-22 09:59
类 IllegalMonitorStateException
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IllegalMonitorStateException
所有已实现的接口:
Serializable
--------------------------------------------------------------------------------
public class IllegalMonitorStateExceptionextends RuntimeException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
从以下版本开始:
JDK1.0
另请参见:
Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(long, int), 序列化表格
帮你查了下API,只能看出是 RuntimeException的子类,运行是无法通过的。
public class IllegalMonitorStateExceptionextends RuntimeException
作者:
kingsummerlucky
时间:
2013-3-22 13:01
关于IllegalMonitorStateException异常:
api中的解释public class IllegalMonitorStateExceptionextends RuntimeException抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 从以下版本开始: JDK1.0 另请参见: Object.notify(), Object.notifyAll(), Object.wait(), Object.wait(long), Object.wait(long, int), 序列化表格
也就是当前的线程不是此对象监视器的所有者。也就是要在当前线程锁定对象,才能用锁定的对象此行这些方法,需要用到synchronized ,锁定什么对象就用什么对象来执行
notify(), notifyAll(),wait(), wait(long), wait(long, int)操作,否则就会报IllegalMonitorStateException异常。
例如 :
exapmle 1,锁定方法所属的实例对象:
public synchronized void method(){
//然后就可以调用:this.notify()...
//或者直接调用notify()...
}
exapmle 2,锁定方法所属的实例的Class:
public Class Test{
public static synchronized void method(){
//然后调用:Test.class.notify()...
}
}
exapmle 3,锁定其他对象:
public Class Test{
public Object lock = new Object();
public static void method(){
synchronized (lock) {
//需要调用 lock.notify();
}
}
}
作者:
可见
时间:
2013-3-22 17:17
{:soso_e153:}{:soso_e153:}{:soso_e153:}{:soso_e153:}{:soso_e153:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2