面试题--三个线程循环打印ABC10次的几种解决方法-Semaphore(4)
package com.ces.myThread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class SemaphoresExample {
Semaphore semaphoreA = new Semaphore(1);
Semaphore semaphoreB = new Semaphore(0);
Semaphore semaphoreC = new Semaphore(0);
private class ThreadA implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
try {
semaphoreA.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("A");
semaphoreB.release();
}
}
}
private class ThreadB implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
try {
semaphoreB.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("B");
semaphoreC.release();
}
}
}
private class ThreadC implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
try {
semaphoreC.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("C");
semaphoreA.release();
}
}
}
public static void main(String[] args) {
SemaphoresExample semaphoresExample=new SemaphoresExample();
ExecutorService executorService= Executors.newFixedThreadPool(3);
executorService.submit(semaphoresExample.new ThreadA());
executorService.submit(semaphoresExample.new ThreadB());
executorService.submit(semaphoresExample.new ThreadC());
executorService.shutdown();
}
}