?? performancetest.java
字號:
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.pool.performance;
import org.apache.commons.pool.impl.GenericObjectPool;
/**
* Multi-thread performance test
*
* @author Dirk Verbeeck
* @version $Revision: 1.5 $ $Date: 2004/02/28 12:16:21 $
*/
public class PerformanceTest {
private int logLevel = 0;
private int nrIterations = 5;
private int nrThreads = 100;
private GenericObjectPool pool;
private boolean start = false;
private volatile int waiting = 0;
private volatile int complete = 0;
private volatile long totalBorrowTime = 0;
private volatile long totalReturnTime = 0;
private volatile int nrSamples = 0;
public void setLogLevel(int i) {
logLevel = i;
}
private void init() {
start = false;
waiting = 0;
complete = 0;
totalBorrowTime = 0;
totalReturnTime = 0;
nrSamples = 0;
}
class MyThread implements Runnable {
long borrowTime;
long returnTime;
public void runOnce() {
try {
waiting++;
if (logLevel >= 5) {
String name = "thread" + Thread.currentThread().getName();
System.out.println(name + " waiting: " + waiting + " complete: " + complete);
}
long bbegin = System.currentTimeMillis();
Object o = pool.borrowObject();
long bend = System.currentTimeMillis();
waiting--;
do {
Thread.yield();
}
while (!start);
if (logLevel >= 3) {
String name = "thread" + Thread.currentThread().getName();
System.out.println(name + " waiting: " + waiting + " complete: " + complete);
}
long rbegin = System.currentTimeMillis();
pool.returnObject(o);
long rend = System.currentTimeMillis();
Thread.yield();
complete++;
borrowTime = (bend-bbegin);
returnTime = (rend-rbegin);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
runOnce(); // warmup
for (int i = 0; i<nrIterations; i++) {
runOnce();
totalBorrowTime += borrowTime;
totalReturnTime += returnTime;
nrSamples++;
if (logLevel >= 2) {
String name = "thread" + Thread.currentThread().getName();
System.out.println(
"result " + nrSamples + "\t" + name
+ "\t" + "borrow time: " + borrowTime + "\t" + "return time: " + returnTime
+ "\t" + "waiting: " + waiting + "\t" + "complete: " + complete);
}
}
}
}
private void run(int nrIterations, int nrThreads, int maxActive, int maxIdle) {
this.nrIterations = nrIterations;
this.nrThreads = nrThreads;
init();
SleepingObjectFactory factory = new SleepingObjectFactory();
if (logLevel >= 4) { factory.setDebug(true); }
pool = new GenericObjectPool(factory);
pool.setMaxActive(maxActive);
pool.setMaxIdle(maxIdle);
pool.setTestOnBorrow(true);
Thread[] threads = new Thread[nrThreads];
for (int i = 0; i < threads.length; i++) {
threads[i]= new Thread(new MyThread(), Integer.toString(i));
Thread.yield();
}
if (logLevel >= 1) { System.out.println("created"); }
Thread.yield();
for (int i = 0; i < threads.length; i++) {
threads[i].start();
Thread.yield();
}
if (logLevel >= 1) { System.out.println("started"); }
Thread.yield();
start = true;
if (logLevel >= 1) { System.out.println("go"); }
Thread.yield();
for (int i = 0; i < threads.length; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (logLevel >= 1) { System.out.println("finish"); }
System.out.println("-----------------------------------------");
System.out.println("nrIterations: " + nrIterations);
System.out.println("nrThreads: " + nrThreads);
System.out.println("maxActive: " + maxActive);
System.out.println("maxIdle: " + maxIdle);
System.out.println("nrSamples: " + nrSamples);
System.out.println("totalBorrowTime: " + totalBorrowTime);
System.out.println("totalReturnTime: " + totalReturnTime);
System.out.println("avg BorrowTime: " + totalBorrowTime/nrSamples);
System.out.println("avg ReturnTime: " + totalReturnTime/nrSamples);
}
public static void main(String[] args) {
PerformanceTest test = new PerformanceTest();
test.setLogLevel(0);
System.out.println("Increase threads");
test.run(1, 50, 5, 5);
test.run(1, 100, 5, 5);
test.run(1, 200, 5, 5);
test.run(1, 400, 5, 5);
System.out.println("Increase threads & poolsize");
test.run(1, 50, 5, 5);
test.run(1, 100, 10, 10);
test.run(1, 200, 20, 20);
test.run(1, 400, 40, 40);
System.out.println("Increase maxIdle");
test.run(1, 400, 40, 5);
test.run(1, 400, 40, 40);
// System.out.println("Show creation/destruction of objects");
// test.setLogLevel(4);
// test.run(1, 400, 40, 5);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -