java – 调用Object类的wait()方法的异常
发布时间:2020-12-15 05:10:15 所属栏目:Java 来源:网络整理
导读:即使在通知当前线程之后,下面的代码也不会执行(使用此). public synchronized void test() { String str = new String(); try { System.out.println("Test1"); this.wait(); this.notifyAll(); System.out.println("Test2"); } catch (Exception e) { // TOD
即使在通知当前线程之后,下面的代码也不会执行(使用此).
public synchronized void test() { String str = new String(); try { System.out.println("Test1"); this.wait(); this.notifyAll(); System.out.println("Test2"); } catch (Exception e) { // TODO Auto-generated catch block System.out.println("Inside exception"); e.printStackTrace(); } } 我只在控制台上输出Test1作为输出. 在第二种情况下,如果我在字符串对象上调用wait方法,我会得到异常.原因是因为字符串类对象str没有锁定当前对象.但我想知道str.wait()实际意味着什么? public synchronized void test() { String str = "ABC"; try { System.out.println("Test1"); str.wait(); str.notifyAll(); System.out.println("Test2"); } catch (Exception e) { // TODO Auto-generated catch block System.out.println("Ins"); e.printStackTrace(); } } 控制台输出: > Test1 java.lang.IllegalMonitorStateException 解决方法
不确定您对该代码的期望:
>在你的第一个例子中,wait执行它所说的内容:它等待,因此从不调用notifyAll 等待和通知的主要用例是线程间通信,即一个线程等待,另一个线程通知等待线程可以唤醒.在您的情况下,相同的线程位于通信通道的两端,不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |