即使在通知当前线程(使用此)之后,以下代码也不会执行。
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