{"id":68580,"date":"2020-09-05T06:52:02","date_gmt":"2020-09-05T06:52:02","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=86644"},"modified":"2020-09-05T06:52:02","modified_gmt":"2020-09-05T06:52:02","slug":"illegalmonitorstateexception-in-java","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2020\/09\/05\/illegalmonitorstateexception-in-java\/","title":{"rendered":"IllegalMonitorStateException in Java"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<h2 data- data-id=\"overview-1\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview-1\"><\/div>\n<p>In this short tutorial, we&#8217;ll learn about <em>java.lang.IllegalMonitorStateException.\u00a0<\/em><\/p>\n<p>We&#8217;ll create a simple sender-receiver application that throws this exception. Then, we&#8217;ll discuss possible ways of preventing it. \u00a0Finally, we&#8217;ll show how to implement these sender and receiver classes correctly.<\/p>\n<h2 data- data-id=\"when_is_exception_thrown\">2. When Is It Thrown?<\/h2>\n<div class=\"bd-anchor\" id=\"when_is_exception_thrown\"><\/div>\n<p>The <em>IllegalMonitorStateException<\/em> is related to multithreading programming in Java. If we have a <em><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/cs\/monitor\">monitor<\/a><\/em> we want to synchronize on, this exception is thrown to indicate that a thread tried to wait or to notify other threads waiting on that monitor, without owning it. <strong>In simpler words, we&#8217;ll get this exception if we call one of the <em>wait()<\/em>, <em>notify(),<\/em> or <em>notifyAll()<\/em> methods of the <em>Object<\/em> class outside of a <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-synchronized\"><em>synchronized<\/em><\/a> block.<\/strong><\/p>\n<p>Let&#8217;s now build an example that throws an <em>IllegalMonitorStateException<\/em>. For this, we&#8217;ll use both <em>wait()<\/em> and <em>notifyAll()<\/em> methods to synchronize the data exchange between a sender and a receiver.<\/p>\n<p>Firstly, let&#8217;s look at the <em>Data<\/em> class that holds the message we&#8217;re going to send:<\/p>\n<pre><code class=\"language-java\">public class Data {\r\n    private String message;\r\n    public void send(String message) {\r\n        this.message = message;\r\n    }\r\n    public String receive() {\r\n        return message;\r\n    }\r\n}<\/code><\/pre>\n<p>Secondly, let&#8217;s create the sender class that throws an <em>IllegalMonitorStateException <\/em>when invoked<em>. <\/em>For this purpose, we&#8217;ll call the <em>notifyAll() <\/em>method without wrapping it in a <em>synchronized<\/em> block:<\/p>\n<pre><code class=\"language-java\">class UnsynchronizedSender implements Runnable {\r\n    private static final Logger log = LoggerFactory.getLogger(UnsychronizedSender.class);\r\n    private final Data data;\r\n    public UnsynchronizedSender(Data data) {\r\n        this.data = data;\r\n    }\r\n    @Override\r\n    public void run() {\r\n        try {\r\n            Thread.sleep(1000);\r\n            data.send(\"test\");\r\n            data.notifyAll();\r\n        } catch (InterruptedException e) {\r\n            log.error(\"thread was interrupted\", e);\r\n            Thread.currentThread().interrupt();\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<p>The receiver is also going to throw an <em>IllegalMonitorStateException. <\/em>Similarly to the previous example, we&#8217;ll make a call to the <em>wait()<\/em> method outside a <em>synchronized<\/em> block:<\/p>\n<pre><code class=\"language-java\">public class UnsynchronizedReceiver implements Runnable {\r\n    private static final Logger log = LoggerFactory.getLogger(UnsynchronizedReceiver.class);\r\n    private final Data data;\r\n    private String message;\r\n    public UnsynchronizedReceiver(Data data) {\r\n        this.data = data;\r\n    }\r\n    @Override\r\n    public void run() {\r\n        try {\r\n            data.wait();\r\n            this.message = data.receive();\r\n        } catch (InterruptedException e) {\r\n            log.error(\"thread was interrupted\", e);\r\n            Thread.currentThread().interrupt();\r\n        }\r\n    }\r\n    public String getMessage() {\r\n        return message;\r\n    }\r\n}<\/code><\/pre>\n<p>Finally, let&#8217;s instantiate both classes and send a message between them:<\/p>\n<pre><code class=\"language-java\">public void sendData() {\r\n    Data data = new Data();\r\n    UnsynchronizedReceiver receiver = new UnsynchronizedReceiver(data);\r\n    Thread receiverThread = new Thread(receiver, \"receiver-thread\");\r\n    receiverThread.start();\r\n    UnsynchronizedSender sender = new UnsynchronizedSender(data);\r\n    Thread senderThread = new Thread(sender, \"sender-thread\");\r\n    senderThread.start();\r\n    senderThread.join(1000);\r\n    receiverThread.join(1000);\r\n}<\/code><\/pre>\n<p>When we try to run this piece of code, we&#8217;ll receive an <em>IllegalMonitorStateException<\/em> from both <em>UnsynchronizedReceiver<\/em> and <em>UnsynchronizedSender<\/em> classes:<\/p>\n<pre><code class=\"language-bash\">[sender-thread] ERROR com.baeldung.exceptions.illegalmonitorstate.UnsynchronizedSender - illegal monitor state exception occurred\r\njava.lang.IllegalMonitorStateException: null\r\n\tat java.base\/java.lang.Object.notifyAll(Native Method)\r\n\tat com.baeldung.exceptions.illegalmonitorstate.UnsynchronizedSender.run(UnsynchronizedSender.java:15)\r\n\tat java.base\/java.lang.Thread.run(Thread.java:844)\r\n[receiver-thread] ERROR com.baeldung.exceptions.illegalmonitorstate.UnsynchronizedReceiver - illegal monitor state exception occurred\r\njava.lang.IllegalMonitorStateException: null\r\n\tat java.base\/java.lang.Object.wait(Native Method)\r\n\tat java.base\/java.lang.Object.wait(Object.java:328)\r\n\tat com.baeldung.exceptions.illegalmonitorstate.UnsynchronizedReceiver.run(UnsynchronizedReceiver.java:12)\r\n\tat java.base\/java.lang.Thread.run(Thread.java:844)\r\n<\/code><\/pre>\n<h2 data- data-id=\"how_to_fix_it\">3. How to Fix It<\/h2>\n<div class=\"bd-anchor\" id=\"how_to_fix_it\"><\/div>\n<p><strong>To get rid of the <em>IllegalMonitorStateException,\u00a0<\/em>we need to make every call to <em>wait()<\/em>, <em>notify(),<\/em>\u00a0and <em>notifyAll() <\/em>methods within a <em>synchronized<\/em> block.<\/strong> With this in mind, let&#8217;s see how the correct implementation of the <em>Sender<\/em> class should look like:<\/p>\n<pre><code class=\"language-java\">class SynchronizedSender implements Runnable {\r\n    private final Data data;\r\n    public SynchronizedSender(Data data) {\r\n        this.data = data;\r\n    }\r\n    @Override\r\n    public void run() {\r\n        synchronized (data) {\r\n            data.send(\"test\");\r\n            data.notifyAll();\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<p>Note we&#8217;re using the <em>synchronized<\/em> block on the same <em>Data<\/em> instance we later call its <em>notifyAll()<\/em> method.<\/p>\n<p>Let&#8217;s fix the <em>Receiver<\/em> in the same way:<\/p>\n<pre><code class=\"language-java\">class SynchronizedReceiver implements Runnable {\r\n    private static final Logger log = LoggerFactory.getLogger(SynchronizedReceiver.class);\r\n    private final Data data;\r\n    private String message;\r\n    public SynchronizedReceiver(Data data) {\r\n        this.data = data;\r\n    }\r\n    @Override\r\n    public void run() {\r\n        synchronized (data) {\r\n            try {\r\n                data.wait();\r\n                this.message = data.receive();\r\n            } catch (InterruptedException e) {\r\n                log.error(\"thread was interrupted\", e);\r\n                Thread.currentThread().interrupt();\r\n            }\r\n        }\r\n    }\r\n    public String getMessage() {\r\n        return message;\r\n    }\r\n}<\/code><\/pre>\n<p>If we again create both classes and try to send the same message between them, everything works well, and no exception is thrown.<\/p>\n<h2 data- data-id=\"conclusion-1\">4. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion-1\"><\/div>\n<p>In this article, we learned what causes <em>IllegalMonitorStateException <\/em>and how to prevent it.<\/p>\n<p>As always, the code is available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/core-java-modules\/core-java-exceptions-3\">over on GitHub<\/a>.<\/p>\n<p>The post <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-illegalmonitorstateexception\/\" >IllegalMonitorStateException in Java<\/a> first appeared on <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/\" >Baeldung<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/635088844\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/635088844\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-illegalmonitorstateexception#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-illegalmonitorstateexception\/feed\/\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>If you want to learn why your code keeps throwing this exception, this article is for you.<\/p>\n<p>The post <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/feeds.feedblitz.com\/~\/635088844\/0\/baeldung~IllegalMonitorStateException-in-Java\/\" target=\"_blank\">IllegalMonitorStateException in Java<\/a> first appeared on <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/www.baeldung.com\/\" target=\"_blank\">Baeldung<\/a>.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>&nbsp;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\"><\/a>&nbsp;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/635088844\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>&nbsp;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>&nbsp;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>&nbsp;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/635088844\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>&nbsp;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-illegalmonitorstateexception#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&nbsp;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-illegalmonitorstateexception\/feed\/\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&nbsp;<\/div>\n<\/div>","protected":false},"author":214,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"IllegalMonitorStateException in Java - ITTeacherITFreelance.hk","description":"If you want to learn why your code keeps throwing this exception, this article is for you. The post IllegalMonitorStateException in Java first appeared on Baeld"},"footnotes":""},"categories":[6],"tags":[5059],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/68580"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/214"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=68580"}],"version-history":[{"count":8,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/68580\/revisions"}],"predecessor-version":[{"id":72478,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/68580\/revisions\/72478"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=68580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=68580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=68580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}