import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
-
@author silence
-
多线程和单线程 打印数字到100000 的速度对比
*/
public class Demo2 {
public static void main(String[] args) {
//循环次数
int number = 5000000;
//单线程 耗时毫秒:3349 : 1000000
// ontThread(number);//10条线程 耗时毫秒:4356tenThread(number);
}
/**
- 多线程
- @param number 循环次数
*/
private static void tenThread(int number) {
long start = System.currentTimeMillis();
ThreadPoolExecutor thread = new ThreadPoolExecutor(
//核心线程数
10,
//最大线程数
10,
//等待时间
10,
//等待单位
TimeUnit.SECONDS,
//排队阻塞队列
new ArrayBlockingQueue<>(1),
//线程工厂
Executors.defaultThreadFactory(),
//拒绝策略
new ThreadPoolExecutor.AbortPolicy()
);
MyRunnable myRunnable = new MyRunnable(number);
for (int i = 0; i < 10; i++) {
thread.submit(myRunnable);
}
//结束线程池
thread.shutdown();
//一致在这里等多线程执行完毕,计算毫秒数
while (true) {
//等所有线程执行完,否则一直等
if (thread.isTerminated()) {
long end = System.currentTimeMillis();
System.out.println(“耗时毫秒:” + (end - start));
break;
}
}
}
//线程实现类
static class MyRunnable implements Runnable {
private static int count = 0;
private int number;public MyRunnable() {}public MyRunnable(int number) {this.number = number;}@Overridepublic void run() {while (count < number) {
// System.out.print(Thread.currentThread().getName() + " = ");
System.out.println(count++);
}
}
}
/*** @param number 循环次数*/
private static void ontThread(int number) {long start = System.currentTimeMillis();int count = 0;for (; count < number; count++) {System.out.println(count);}long end = System.currentTimeMillis();System.out.println("耗时毫秒:" + (end - start) + " : " + count);}
}