题目详细描述
解题思路主要在于信号量的使用!
话不多说,Foobar类,foo(),bar()方法,代码如下(注释超详细!)
本地IDEA执行(jdk1.8)
import java.util.concurrent.Semaphore;
/**
* 两个不同的线程将会共用一个FooBar实例
* 其中一个线程调用foo()方法,另一个线程调用bar()方法
* 确保"foobar"被输出n次
*/
public class FooBar {
private int n;
public FooBar(int n){
this.n = n;
}
//public Semaphore(int permits){sync = new NonfairSync(permits);}
// 新建信号量, permits值为 允许可用的初始许可数量,可以为负值,但是必须是有许可被赋予的情况下
private Semaphore sema_foo = new Semaphore(1); //sema_foo 初始许可为1
private Semaphore sema_bar = new Semaphore