我收到错误:
package main_test;
public class Main {
public static void main(String[] args) throws InterruptedException
{
Main m = new Main();
System.out.println("Main Started");
m.wait();
System.out.println("Main Terminated");
}
}
答案 0 :(得分:2)
您必须首先获得锁定,然后才能呼叫等待。尝试这样的事情:
public static void main(String[] args) throws InterruptedException {
Main m = new Main();
System.out.println("Main Started");
synchronized (m) {
m.wait();
}
System.out.println("Main Terminated");
}
但现在程序不会终止 - 显然。其他一些线程需要在您调用的对象notify()
上调用wait()
。 (这就是使用局部变量的一个坏主意,但这仅仅是一个例子......)
有关详细信息,请参阅java tutorial。
答案 1 :(得分:0)
public static void main(String[] args) throws InterruptedException {
Main m = new Main();
System.out.println("Main Started");
synchronized (m) {
m.wait();
}
System.out.println("Main Terminated");
}
程序不会终止!!
答案 2 :(得分:0)
您必须通过使特定块或方法同步来显式获取监视器。 wait()释放执行线程持有的锁,notify()通知其他线程执行。
示例:
Object lock= new Object();
synchronized(lock){
// write your code here. You may use wait() or notify() as per your requirement.
wait(1000);
notify();
}
或者您可以使用同步方法:
public synchronized void putMessage(){
// write your code
wait(1000);
notify();
// write your code
}