信号量(semaphore)
1.声明:Semaphore sema = new Semaphore(1); //令其初值为1
2.wait操作:this.sema.acquire(1); //申请1个信号量使用权
3.signal操作:this.sema.release(1); //释放一个信号量
4.runnable的函数:(Runnable printFizz)调用:printFizz.run() outputs "fizz"
5. IntConsumer的函数:(IntConsumer printNumber) printNumber.accept(x) outputs "x", where x is an integer.
AtomicInteger
1.声明初始化:AtomicInteger firstJobDone = new AtomicInteger(0)
2.signal操作: firstJobDone.incrementAndGet();
3.wait操作—循环等待:
while (firstJobDone.get() != 1) {
// waiting for the first job to be done.
}
4.使用方法:
public final int getAndSet(int newValue) //给AtomicInteger设置newValue并返回加oldValue
public final boolean compareAndSet(int expect, int update) //如果输入的值和期望值相等就set并返回true/false
public final int getAndIncrement() //对AtomicInteger原子的加1并返回当前自增前的value
public final int getAndDecrement() //对AtomicInteger原子的减1并返回自减之前的的value
public final int getAndAdd(int delta) //对AtomicInteger原子的加上delta值并返加之前的value
public final int incrementAndGet() //对AtomicInteger原子的加1并返回加1后的值
public final int decrementAndGet() //对AtomicInteger原子的减1并返回减1后的值
public final int addAndGet(int delta) //给AtomicInteger原子的加上指定的delta值并返回加后的值