package com.boco.stackTest.sxlTest;
import com.boco.stackTest.LinkStack;
import com.boco.stackTest.Stack;
import com.boco.stackTest.link.LinkNode;
import com.boco.stackTest.sxlTest.ConcurrentTest.ConcurrentTask;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//使用自己实现的栈进行初始化
final Stack<Long> s = new LinkStack();
//创建多个线程同时压栈,64位JVM可以开到10000+,32位JVM可以开到2000~3000之间
int threadNum = 2000;
ConcurrentTask[] task = new ConcurrentTask[threadNum];
long start = System.nanoTime();
for (int i = 0; i < task.length; i++) {
task[i] = new ConcurrentTask() {
public void run() {
LinkNode node = new LinkNode(1,"name");
s.push(node);
}
};
}
new ConcurrentTest(task);
long end = System.nanoTime();
//打印所有线程的入栈时间
System.out.println("total time: " + (end - start)/1.0e9);
/*
* 测试时要保证下面打印的i和上面初始化的线程数threadNum一致,
* 因为如果是线程安全的栈,入栈和出栈的数目应该是一样的。
* 如果要单独测试上面的total time:时间,可以将下面的代码注释掉进行测试。
*/
System.out.println("pop ------------------------------------");
for (int i=1;;i++) {
LinkNode l = s.pop();
if(l == null)
break;
System.out.println(i + " "+l.getKey()+" " + l.getValue());
}
}
}