当前位置:嗨网首页>书籍在线阅读

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()));