19-案例实现
案例实现
根据如下步骤实现本案例。
1.创建一个实现了 Runnable
接口的类,并命名为 Task
:
public class Task implements Runnable {
2.实现 run()
方法。创建一个1000000次的循环,在每次循环中,用整型变量做一些数学运算:
@Override
public void run() {
int r;
for (int i=0; i<1000000; i++) {
r=0;
r++;
r++;
r*=r;
}
}
3.实现本案例的主类,创建一个名为 Main
的类,并在其中添加 main()
方法:
public class Main {
public static void main(String[] args) {
4.创建1000个线程执行1000个任务对象,等待执行结束后打印执行时长:
Thread threads[]=new Thread[1000];
Date start,end;
start=new Date();
for (int i=0; i<threads.length; i++) {
Task task=new Task();
threads[i]=new Thread(task);
threads[i].start();
}
for (int i=0; i<threads.length; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
end=new Date();
System.out.printf("Main: Threads: %d\n",
(end.getTime()-start.getTime()));
5.创建 Executor
对象,向其发送1000个 Task
对象,等待执行完成后打印执行时间:
ThreadPoolExecutor executor=(ThreadPoolExecutor)Executors
.newCachedThreadPool();
start=new Date();
for (int i=0; i<threads.length; i++) {
Task task=new Task();
executor.execute(task);
}
executor.shutdown();
try {
executor.awaitTermination(1, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
end=new Date();
System.out.printf("Main: Executor: %d\n",
(end.getTime()-start.getTime()));