Java 异常 Java.Lang.IllegalMonitorStateException
IllegalMonitorStateException 与多线程编程有关。 本篇文章描述并演示了 Java 中的 IllegalMonitorStateException。
Java 中的 java.lang.IllegalMonitorStateException
在 Java 中使用多线程编程时会发生 IllegalMonitorStateException。 当我们在监视器上进行同步时,一个线程尝试等待或通知在该监视器上等待的其他线程,但此时不拥有该监视器,则会发生 IllegalMonitorStateException。
如果我们从不在同步块中的对象类中调用方法 wait()
、notify()
或notifyAll()
,则会抛出此异常。 让我们在这个场景中尝试一个例子。
package jiyik;
class DemoClass implements Runnable {
public void run() {
try {
// The wait method is called outside the synchronized block
this.wait(100);
System.out.println("Thread can successfully run.");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
public class Example {
public static void main(String[] args) {
DemoClass DemoRunnable = new DemoClass();
Thread DemoThread = new Thread(DemoRunnable);
DemoThread.start();
}
}
上面的代码创建了一个实现 Runnable 类的类,然后在同步块之外调用 wait 方法。 该示例从 DemoClass 的实例创建一个线程。
它将抛出 IllegalMonitorStateException,因为 wait 方法是在同步块之外调用的,并且在调用 wait()
方法之前线程必须拥有监视器上的锁。 查看输出:
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException: current thread is not owner
at java.base/java.lang.Object.wait(Native Method)
at jiyik.DemoClass.run(Example.java:7)
at java.base/java.lang.Thread.run(Thread.java:833)
要修复此异常,我们必须在获取对象锁后调用 wait()
、notify()
或 notifyAll()
方法,这些方法将位于同步块中。
现在让我们将 wait()
方法放入同步块中,然后使上面的代码不会出错。 参见示例:
package jiyik;
class DemoClass implements Runnable {
public void run() {
synchronized (this) {
try {
// The wait method is called outside the synchronized block
this.wait(100);
System.out.println("Thread can successfully run.");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public class Example {
public static void main(String[] args) {
DemoClass DemoRunnable = new DemoClass();
Thread DemoThread = new Thread(DemoRunnable);
DemoThread.start();
}
}
现在 wait()
方法位于同步块内,并且获取了对象监视器上的锁,代码将成功运行。 查看输出:
Thread can successfully run.
相关文章
Java 异常 Java.IO.StreamCorruptedException: Invalid Stream Header
发布时间:2023/07/16 浏览次数:165 分类:Java
-
本文介绍如何修复Java的 java.io.StreamCorruptedException: invalid stream header 异常。Java 中的 java.io.StreamCorruptedException: invalid stream header java.io.StreamCorruptedException: invalid stream header 是相对常见的异常。
Java 异常 Java.IO.IOException: Connection Reset by Peer
发布时间:2023/07/16 浏览次数:177 分类:Java
-
本篇文章介绍 Java 的 java.io.IOException: Connection reset by peer。Java 中 java.io.IOException: Connection reset by peer IOException 表示读取或写入文件或访问文件系统时可能发生的任何输入输出异常。
Java 异常 Exception in Thread AWT-EventQueue-0 java.lang.NullPointerException
发布时间:2023/07/16 浏览次数:59 分类:Java
-
当我们使用 Java AWT 包方法并且将 null 值传递给任何方法时,会发生 “AWT-EventQueue-0”java.lang.NullPointerException 异常。 本教程演示如何在 Java 中解决此 NullPointerException。Java 中线程“AWT-EventQueue-0”
Java 异常 Exception in Thread Main Java.Util.NoSuchElementException: No Line Fo
发布时间:2023/07/16 浏览次数:152 分类:Java
-
本篇文章介绍如何解决Java中的异常 Exception in thread "main" java.util.NoSuchElementException: No line found。java.util.NoSuchElementException 是运行时未经检查的异常
Java 异常 Java.Lang.ClassNotFoundeException: Sun.Jdbc.Odbc.JdbcOdbcDriver
发布时间:2023/07/15 浏览次数:106 分类:Java
-
本篇文章介绍了 Java 中的 java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver 错误。修复 Java 中的 java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
Java 异常 Java.Lang.ClassNotFoundException: Org.SpringFramework.Web.Servlet.Dis
发布时间:2023/07/15 浏览次数:179 分类:Java
-
今天关于 Java 的文章将介绍错误 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。什么是 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
解决 Java 异常 Unable to Instantiate org.apache.hadoop.hive.ql.metadata.Sessi
发布时间:2023/07/14 浏览次数:183 分类:Java
-
本篇文章介绍如何解决 java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient。Apache Hive 是一款开源数据仓库软件,用于读取、管理和写入存储在 Hadoop 文件中的大
Java 异常 java.lang.AbstractMethodError
发布时间:2023/07/14 浏览次数:112 分类:Java
-
本文将帮助您了解 java.lang.AbstractMethodError 以及如何在 Java 中解决它们。修复 Java 中的 java.lang.AbstractMethodError 错误 有时,我们的程序在运行时可能会遇到 AbstractMethodError。
解决 Java 中 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 异常
发布时间:2023/07/13 浏览次数:90 分类:Java
-
本篇文章介绍了 Java 中的“Java.lang.outofmemoryerror: GC overhead limit exceeded”错误。Java.lang.outofmemoryerror: GC overhead limit exceeded错误