- 问题描述:100个线程,交替打印 1 - 10000 数字。
Thread 0 : 0
Thread 1 : 1
...
Thread 98 : 98
Thread 99 : 99
...
...
Thread 0 : 9900
Thread 1 : 9901
...
Thread 98: 9998
Thread 99: 9999
@Test
public void testPrintNum() throws InterruptedException {
Thread[] ts = new Thread[100];
for (int i = 0; i < 100; i++) {
Thread t = new PrintThread(i);
ts[i] = t;
t.start();
}
for (Thread t : ts) {
t.join();
}
}
static class PrintThread extends Thread {
private final int serialNo;
private static final AtomicInteger ai = new AtomicInteger(0);
private static final CyclicBarrier cb = new CyclicBarrier(100);
public PrintThread(int serialNo) {
this.serialNo = serialNo;
}
@Override
public void run() {
int num = serialNo;
while (num < 10000) {
while (ai.get() % 100 != serialNo) {
Thread.currentThread().yield();
}
System.out.println("Thread " + serialNo " : " + num);
ai.incrementAndGet();
num += 100;
try {
cb.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}