什么时候可以在Java中调用线程的wait()和wait(long)方法?
每当在对象上调用wait()方法时,它都会导致当前线程等待,直到另一个线程为此对象调用notify() 或notifyAll()方法,而wait(longtimeout)导致当前线程等待直到另一个线程线程为此对象调用notify()或notifyAll()方法,或者指定的超时时间已经过去。
等待()
在下面的程序中,当在对象上调用wait()时 ,线程从运行状态进入等待状态。它等待其他线程调用notify()或notifyAll()使其进入可运行状态,从而形成死锁 。
示例
class MyRunnable implements Runnable {
public void run() {
synchronized(this) {
System.out.println("In run() method");
try {
this.wait();
System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
}
public class WaitMethodWithoutParameterTest {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable, "Thread-1");
thread.start();
}
}输出结果
In run() method
等待(长)
在下面的程序中,在对象上调用 wait(1000)时 ,即使在超时时间过后未调用 notify() 或notifyAll(),线程也会从运行状态进入等待状态,线程将从等待状态变为可运行状态。
示例
class MyRunnable implements Runnable {
public void run() {
synchronized(this) {
System.out.println("In run() method");
try { this.wait(1000);
System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
}
public class WaitMethodWithParameterTest {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable, "Thread-1");
thread.start();
}
}输出结果
In run() method Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()
热门推荐
10 读书祝福语女生短句简短
11 感谢同事新婚祝福语简短
12 感谢教官文案祝福语简短
13 员工聚会蛋糕祝福语简短
14 元宵发客户祝福语简短
15 给团队信心祝福语简短
16 医美的祝福语大全简短
17 异国姻缘的祝福语简短
18 兄妹拍照祝福语简短的话