`
lzj0470
  • 浏览: 1277165 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java.lang.IllegalMonitorStateException: current thread not owner

    博客分类:
  • java
阅读更多

从实现角度来分析:
在线程调用wait()方法时,需要把它放到一个同步段里 ,即应该在调用前使用

synchronized( this ) {
  thread.wait();
 
}

否则将会出现"java.lang.IllegalMonitorStateException: current thread not owner"的异常。

分享到:
评论
1 楼 endual 2012-03-02  
syn里面放的是共有资源,如果修饰方法的话,共有资源是this.

谁是共有资源就用谁的notify和wait

相关推荐

    java.lang.IllegalMonitorStateException(解决方案).md

    项目中碰到的,记录一下解决方案

    SCJP 6 question demo

    - **IllegalMonitorStateException:** An `IllegalMonitorStateException` is thrown by the `wait()`, `notify()`, and `notifyAll()` methods if the current thread is not the owner of the object's monitor (i...

    scjp认证考试原题

    - B正确,因为`obj.wait()`是在`Thread.currentThread()`上同步而不是`obj`,因此如果当前线程不是`obj`的对象锁的所有者,将会抛出`IllegalMonitorStateException`。 - C错误,`TimeoutException`不是Java标准...

    SCJP 1.6 10年5月最新真题

    由于`synchronized`锁定的是`Thread.currentThread()`而非`obj`,所以`obj.wait()`会导致`IllegalMonitorStateException`,因为在当前线程没有持有`obj`的对象锁的情况下调用了`obj.wait()`。 - **选项C**:错误。...

    j2me api中文版

    11. **IllegalMonitorStateException**: 当线程试图等待一个它没有监视器锁的对象时抛出的异常。 12. **IllegalStateException**: 当方法调用无效因为对象的状态不正确时抛出的异常。 13. **...

    SCJP认证考题310-065

    - A选项错误,`obj.wait()`需要在`synchronized`块内被调用,但是需要同步的对象是`obj`,而不是`Thread.currentThread()`。 - B选项正确,由于`obj.wait()`是在没有获取到`obj`对象锁的情况下调用的,这会导致`...

    Sun Certified Programmer for the Java Platform, Standard Edition 6认证考试题库.docx

    Sun Certified Programmer for the Java Platform, Standard Edition 6 (SCJP6) 是一项针对Java SE 6平台程序员的认证考试,旨在验证候选人在Java编程语言、核心API和编程实践方面的知识和技能。以下是从提供的文件...

    J2ME中文帮助文档

    47. **IllegalMonitorStateException**: 当线程尝试等待一个没有被锁住的对象时抛出此异常。 48. **IllegalStateException**: 当方法调用处于不适当的状态时抛出此异常。 49. **IllegalThreadStateException**: ...

    Java多线程

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多核处理器的普及使得多线程成为软件开发不可或缺的一部分。本文将深入探讨Java中多线程...

    JAVA 多线程学习笔记

    2. 创建线程:Java提供了两种创建线程的方式:通过继承`Thread`类和实现`Runnable`接口。继承`Thread`类直接重写`run()`方法,实现`Runnable`接口则需创建一个类实现`run()`,然后将该类实例传给`Thread`构造器。 3...

    Java并发编程学习笔记.

    2. **并发基础**:Java并发编程的基础包括`Thread.start()`启动线程,`Thread.join()`等待线程结束,以及`Thread.sleep()`让当前线程暂停一段时间。 3. **同步机制**:Java提供了多种同步机制,如`synchronized`...

    锁、生产者与消费者.pdf

    生产者消费者详解wait():执行该方法的线程对象,释放同步锁,JVM会把该线程放到等待池中,等待其他线程唤醒该线程 notify():执行该方法的线程唤醒在等待池中等待的任意一个... java.lang.IllegalMonitorStateException

    Sun Certified Programmer for the Java 2 Platform(310-065)

    java.lang.RuntimeException: Problem"。 2. 死锁的理解与预防: 死锁是多线程编程中的一个关键问题,它发生在两个或多个线程相互等待对方释放资源而无法继续执行的情况。问题3中的选项A和F正确阐述了死锁的特性...

    javathread.part02.rar

    线程优先级也是Java线程管理的一部分,Java提供了10个级别的线程优先级(Thread.MIN_PRIORITY到Thread.MAX_PRIORITY,其中Thread.NORM_PRIORITY是默认值)。但需要注意,线程优先级并不保证绝对的执行顺序,只是对...

    Java高级前80题测试含答案.docx

    - Thread类位于java.lang包中,而不是java.util。 - 创建线程有两种方式:继承Thread类和实现Runnable接口。继承Thread类会引发单继承的问题,而实现Runnable接口则可以避免。 - 线程有多种状态,包括新建、可...

Global site tag (gtag.js) - Google Analytics