java wait/notify 小试牛刀

两个线程交替打印奇数偶数,使用wait notify进行线程协调通信

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

public class {

private final Object lock = new Object();

public void run() {


new Thread(new Runnable() {
public void run() {
for (int i = 1; i <= 100; i += 2) {
// 获得锁
synchronized (lock) {
// 打印数字
System.out.println(i);
// 打印完成后通知线程2继续操作
lock.notify();
// 阻塞,释放锁 等待线程2完成操作后唤醒
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();

//线程2打印偶数
new Thread(new Runnable() {
public void run() {
for (int i = 2; i <= 100; i += 2) {
synchronized (lock) {
// 若获得锁 则通知线程1进行操作
lock.notify();
// 阻塞 等待线程1先打印奇数后通知
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 打印偶数
System.out.println(i);
}
}
}
}).start();
}

public static void main(String[] args) {
WaitNotify waitNotify = new WaitNotify();
waitNotify.run();
}
}