什么时候可以在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 好听的元旦简短祝福语