题目要求:有一个函数print(int i)被两个线程调用,一个线程调用它打印1,另外一个线程调用它打印2,要求最终打印出121121121.....的效果:
参考代码:
/**
* print(i)被两个线程调用,一个打印1,一个打印2,要求最终打印出121121121....的效果
*/
private static void print(int i) {
System.out.println(i);
}
private static void multiThreadPrint() {
Semaphore semaphore1 = new Semaphore(1);
Semaphore semaphore2 = new Semaphore(0);
new Thread(() -> {
while (true) {
try {
semaphore2.acquire();
print(2);
semaphore1.release(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(() -> {
while (true) {
try {
semaphore1.acquire();
print(1);
semaphore2.release();
semaphore1.acquire();
print(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public static void main(String[] args) {
multiThreadPrint();
}