目录
问题描述思路代码输出
问题描述
Java创建三个线程,交替打印1-100。
思路
这个问题和之前写的那篇Java多线程:三个线程循环顺序打印ABC其实是一样的。
代码
class PrintNumber {
private volatile int number
= 1;
private volatile int value
= 1;
void firstPrint() {
synchronized (this) {
while(value
!= 1) {
try {
wait();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
}
System
.out
.println(Thread
.currentThread().getName() + ": " + number
);
number
++;
value
= 2;
notifyAll();
}
}
void secondPrint() {
synchronized (this) {
while (value
!= 2) {
try {
wait();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
}
System
.out
.println(Thread
.currentThread().getName() + ": " + number
);
number
++;
value
= 3;
notifyAll();
}
}
void thirdPrint() {
synchronized (this) {
while (value
!=3) {
try {
wait();
} catch (InterruptedException e
) {
e
.printStackTrace();
}
}
System
.out
.println(Thread
.currentThread().getName() + ": " + number
);
number
++;
value
= 1;
notifyAll();
}
}
}
public class Main {
public static void main(String
[] args
) {
PrintNumber printNumber
= new PrintNumber();
new Thread(new Runnable() {
@Override
public void run() {
for (int i
= 0; i
< 34; i
++) {
printNumber
.firstPrint();
}
}
},"线程一").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i
= 0; i
< 33; i
++) {
printNumber
.secondPrint();
}
}
},"线程二").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i
= 0; i
< 33; i
++) {
printNumber
.thirdPrint();
}
}
},"线程三").start();
}
}
输出
线程一: 1
线程二: 2
线程三: 3
线程一: 4
......
线程一: 97
线程二: 98
线程三: 99
线程一: 100