wait()方法的作用是让当前线程进入等待状态,同时,wait()方法也会让当前线程释放它所持有的锁,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,当前线程被唤醒(进入“就绪状态”)
package com.xiaoma.thread;
/**
* 两个线程,一个线程打印奇数,另一个线程打印偶数
*/
public class MyThreadTest01 {
public static void main(String[] args) {
MyNum myNum = new MyNum();
MyThread03 myThread03 = new MyThread03(myNum);
MyThread04 myThread04 = new MyThread04(myNum);
myThread03.setName("thread 1");
myThread04.setName("thread 2");
myThread03.start();
myThread04.start();
}
}
class MyNum {
int num = 0;
}
class MyThread03 extends Thread {
MyNum myNum;
public MyThread03(MyNum myNum) {
this.myNum = myNum;
}
@Override
public void run() {
synchronized (myNum) {
while (myNum.num<=100) {
if (myNum.num % 2 == 0) {
System.out.println(this.getName() + " --> " + myNum.num + " --> 偶数");
try {
myNum.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
myNum.num += 1;
myNum.notify();
}
}
}
}
class MyThread04 extends Thread {
MyNum myNum;
public MyThread04(MyNum myNum) {
this.myNum = myNum;
}
@Override
public void run() {
synchronized (myNum) {
while (myNum.num<100) {
if (myNum.num % 2 != 0) {
System.out.println(this.getName() + " --> " + myNum.num + " --> 奇数");
try {
myNum.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
myNum.num += 1;
myNum.notify();
}
}
}
}
打印结果