使用 ThreadPoolExecutor 时出错

Error in using ThreadPoolExecutor

我有以下作业,我希望 ThreadPoolExecutor run.I 想打印每个作业的开始时间和结束时间。开始时间正在打印,但结束时间未打印。我不知道我做错了什么请帮忙!

import java.util.concurrent.TimeUnit;  

public class Job  implements Runnable {
private long startTime,endTime,delay;
int id;

public Job(long delay) {
    this.delay=delay;

  }
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}

public long getstartTime() {
    return startTime;
}
public void setstartTime(long startTime) {
    this.startTime = startTime;
}
public long getendTime() {
    return endTime;
}
public void setendTime(long endTime) {
    this.endTime = endTime;
}

      @Override
public void run() {

     setstartTime(System.nanoTime());

       try{
           TimeUnit.MILLISECONDS.sleep(delay);
           }catch(InterruptedException e){
            }
    setendTime(System.nanoTime());
     }


    }

以下是主要内容class

import java.util.Vector;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class OracleExecutorService {
    ThreadPoolExecutor executor; //= (ThreadPoolExecutor) Executors.newCachedThreadPool();
    Vector vector=new Vector();

    public OracleExecutorService() {
        super();
        this.executor= (ThreadPoolExecutor) Executors.newCachedThreadPool();
        runJobs();
        displayResults();
        this.executor.shutdown();
    }

    private void displayResults() {
        // TODO Auto-generated method stub
        for(int i=0;i<vector.size();i++){
            Job job=(Job)vector.get(i); 
            System.out.println("Job id="+job.getId()+" start time="+job.getstartTime());
            System.out.println("Job id="+job.getId()+" end time="+job.getendTime());            
        }
    }

    private void runJobs() {
        // TODO Auto-generated method stub
        int count;
        for (int i = 0; i <= 5; i++) 
        {
            Job job=new Job(100); //100milliseconds
            count=i+1;
            job.setId(count);
            vector.add(job);
            executor.execute(job);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new OracleExecutorService();


    }

}

输出如下

Job id=1 开始时间=935938224433767

作业id=1 结束时间=0

Job id=2 开始时间=935938224477583

作业id=2 结束时间=0

Job id=3 开始时间=935938224648899

作业id=3 结束时间=0

Job id=4 开始时间=935938224696268

作业id=4 结束时间=0

Job id=5 开始时间=935938224749952

作业id=5 结束时间=0

Job id=6 开始时间=935938224796532

作业id=6 结束时间=0

没有错误。

基本上在设置结束时间之前,或者甚至在作业完成之前,您调用 displayResults。

     runJobs();
    Thread.sleep(200);// wait for the job to finish - would make the end time is set and display
    displayResults(); 

试试这个。你会知道会发生什么。

   setendTime(System.nanoTime());
   System.out.println("I am done:" + System.nanoTime());