public class n个线程打印0到100 {
static int result = 0;
public static void main(String[] args) throws InterruptedException {
int n = 20;
Thread[] threads = new Thread[n];
final Semaphore[] s = new Semaphore[n];
for (int i = 0; i < n; i++) {
s[i] = new Semaphore(1);
if (i != n - 1) {
s[i].acquire();
}
}
for (int i = 0; i < n; i++) {
final Semaphore lastSemphore = i == 0 ? s[n - 1] : s[i - 1];
final Semaphore curSemphore = s[i];
final int index = i;
threads[i] = new Thread(() -> {
try {
while (true) {
lastSemphore.acquire();
System.out.println("thread" + index + ": " + result++);
if (result > 100) {
System.exit(0);
}
curSemphore.release();
}
} catch (Exception e) {
e.printStackTrace();
}
});
threads[i].start();
}
}
}