并发程序测试的要点
- 吞吐量
- 响应性
- 可伸缩性
正确性测试
首先需要一个可供测试的程序做为栗子。就是下面这个了。一个固定长度的 队列,其中定义可阻塞的put和take方法,并通过两个计数器进行控制。
import java.util.concurrent.Semaphore;
public class BoundedBuffer<E> {
private final Semaphore availableItems, availableSpaces;
private final E[] Items;
private int putPosition = 0, takePosition = 0;
public BoundedBuffer(int capacity) {
availableItems = new Semaphore(0);
availableSpaces = new Semaphore(capacity);
Items = (E[]) new Object[capacity];
}
public boolean isEmpty() {
return availableItems.availablePermits() == 0;
}
public boolean isFull() {
return availableSpaces.availablePermits() == 0;
}
public void put(E x) throws InterruptedException {
availableSpaces.acquire();
doInsert(x);
availableItems.release();
}
public E take() throws InterruptedException {
availableItems.acquire();
E item = doExtra();
availableSpaces.release();
return item;
}
private synchronized void doInsert(E x) {
// TODO Auto-generated method stub
int i = putPosition;
Items[i] = x;
putPosition = (++i == Items.length) ? 0 : i;
}
private synchronized E d