使用ThreadPoolExecutor时出错

费萨尔·巴哈杜尔

我有要让ThreadPoolExecutor运行的作业,我想打印每个作业的开始时间和结束时间。开始时间在打印,但结束时间不在打印。我不知道我在做什么错,请帮忙!

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


    }

以下是主要班级

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


    }

}

输出如下

作业ID = 1开始时间= 935938224433767

作业ID = 1结束时间= 0

作业ID = 2开始时间= 935938224477583

作业ID = 2结束时间= 0

作业ID = 3开始时间= 935938224648899

作业ID = 3结束时间= 0

作业ID = 4开始时间= 935938224696268

作业ID = 4结束时间= 0

作业ID = 5开始时间= 935938224749952

作业ID = 5结束时间= 0

作业ID = 6开始时间= 935938224796532

作业ID = 6结束时间= 0

葡萄酒

没有错。

基本上在设置endTime之前,或者甚至在作业完成之前,您可以调用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());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章