使用示例
public class Test {
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
private int count;
public void add() {
lock.lock();
try {
while (count != 0) {
condition.await();
}
count ++;
System.out.println("加加");
condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void subtract() {
lock.lock();
try {
while (count == 0) {
condition.await();
}
count --;
System.out.println("减减");
condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws Exception{
Test t = new Test();
new Thread(()->{
for(int i=0; i<100; i++)
t.add();
}).start();
new Thread(()->{
for(int i=0; i<100; i++)
t.subtract();
}).start();
}
}
结果:
加加
减减
加加
减减
......