Java多线程轮流打印ABC
2020-05-29 本文已影响0人
cbhe
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Main{
public static void main(String[] args) {
MultiTest multiTest = new MultiTest();
new Thread(multiTest::printA).start();
new Thread(multiTest::printB).start();
new Thread(multiTest::printC).start();
}
}
class MultiTest{
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
volatile int flag = 1;
public void printA(){
for (int i = 0; i< 10; i++) {
lock.lock();
try {
while (flag != 1) {
condition.await();
}
System.out.println("A");
flag = 2;
condition.signalAll();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
}
public void printB(){
for (int i = 0; i< 10; i++) {
lock.lock();
try {
while (flag != 2) {
condition.await();
}
System.out.println("B");
flag = 3;
condition.signalAll();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
}
public void printC(){
for (int i = 0; i< 10; i++) {
lock.lock();
try {
while (flag != 3) {
condition.await();
}
System.out.println("C");
flag = 1;
condition.signalAll();
} catch (Exception e) {
} finally {
lock.unlock();
}
}
}
}