Repository navigation
Expand file tree
/
Copy pathAlternatePrintingExample.java
More file actions
70 lines (56 loc) · 1.87 KB
/
Copy pathAlternatePrintingExample.java
File metadata and controls
70 lines (56 loc) · 1.87 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class AlternatePrintingExample {
public static void main(String[] args) {
NumberPrinter printer = new NumberPrinter();
// 创建并启动第一个线程,打印奇数
Thread oddThread = new Thread(new OddNumberTask(printer));
oddThread.start();
// 创建并启动第二个线程,打印偶数
Thread evenThread = new Thread(new EvenNumberTask(printer));
evenThread.start();
}
}
class NumberPrinter {
private int number = 1;
private final int maxNumber = 10;
private boolean isOddTurn = true; // 控制奇偶数交替打印的标志
// 打印奇数
public synchronized void printOdd() {
while (number <= maxNumber) {
if (isOddTurn && number % 2 != 0) {
System.out.println(Thread.currentThread().getName() + " - Odd: " + number);
number++;
isOddTurn = false; // 切换到偶数的轮次
}
}
}
// 打印偶数
public synchronized void printEven() {
while (number <= maxNumber) {
if (!isOddTurn && number % 2 == 0) {
System.out.println(Thread.currentThread().getName() + " - Even: " + number);
number++;
isOddTurn = true; // 切换到奇数的轮次
}
}
}
}
class OddNumberTask implements Runnable {
private final NumberPrinter printer;
public OddNumberTask(NumberPrinter printer) {
this.printer = printer;
}
@Override
public void run() {
printer.printOdd();
}
}
class EvenNumberTask implements Runnable {
private final NumberPrinter printer;
public EvenNumberTask(NumberPrinter printer) {
this.printer = printer;
}
@Override
public void run() {
printer.printEven();
}
}