什么时候可以在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 婶婶拜年祝福语大全简短