目录
1.两个线程交替打印1-100
package com.example.practice.Thread;
/**
* @author liuxiaobai
*/
public class WindowSaleTicket {
public static void main(String[] args) {
Window window = new Window();
new Thread(window).start();
new Thread(window).start();
}
}
class Window implements Runnable {
int count = 0;
@Override
public void run() {
while (true) {
synchronized (this) {
if (count >= 100) {
notify();
break;
}
count++;
System.out.println(Thread.currentThread().getName() + " " + count);
notify();
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
2.三个线程交替打印1-100
package com.example.practice.Thread;
class PrintNumber {
private int number = 1;
private int windowNumber = 1;
void firstThreadPrint() {
synchronized (this) {
while (windowNumber != 1) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + number);
number++;
windowNumber = 2;
notifyAll();
}
}
void secondThreadPrint() {
synchronized (this) {
while (windowNumber != 2) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + number);
number++;
windowNumber = 3;
notifyAll();
}
}
void thirdThreadPrint() {
synchronized (this) {
while (windowNumber != 3) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ": " + number);
number++;
windowNumber = 1;
notifyAll();
}
}
}
public class WindowSaleTicket {
public static void main(String[] args) {
PrintNumber printNumber = new PrintNumber();
new Thread(() -> {
for (int i = 0; i < 34; i++) {
printNumber.firstThreadPrint();
}
}).start();
new Thread(() -> {
for (int i = 0; i < 33; i++) {
printNumber.secondThreadPrint();
}
}).start();
new Thread(() -> {
for (int i = 0; i < 33; i++) {
printNumber.thirdThreadPrint();
}
}).start();
}
}