/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.common.progress; import java.util.HashMap; import java.util.Map; import java.util.Random; import junit.framework.TestCase; import com.jinhe.tss.core.common.progress.Progress; import com.jinhe.tss.core.common.progress.ProgressManager; import com.jinhe.tss.core.common.progress.ProgressPool; import com.jinhe.tss.core.common.progress.Progressable; import com.jinhe.tss.core.exception.BusinessException; /** * <p> ProgressTest.java </p> * * 测试进度条 */ public class ProgressTest extends TestCase { String code; long delay = 3; //每次取进度信息间隔时间 单位 s public void setUp() { ProgressManager manager = new ProgressManager(new Progressable(){ public void execute(Map<String, Object> params, Progress progress) { for(int i = 1; i <= 100; i++) { // 随即的休眠1--5秒,然后打印出当前循环到的序号,直到100只进度100%完成。 try { Thread.sleep(new Random().nextInt(5) * 100); } catch (InterruptedException e) { } System.out.println(i); if( i%10 == 0) { progress.add(10); // 进度加10 } } } }, 100, new HashMap<String, Object>()); code = manager.execute(); } // 以下为不同的线程轮番请求进度信息 public void testProgressInMultiThread() { int i = 0; Progress progress = (Progress)ProgressPool.getSchedule(code); while (!progress.isCompleted() && !progress.isConceal()) { new Thread() { public void run() { delay = getProgress(code); } }.start(); try { Thread.sleep(delay * 1000); } catch (InterruptedException e) { } if(i++ == 32) { // progress.setIsConceal(true); //设置中止标志 } } } public void testProgressInMultiThread2() { int i = 0; Progress progress = ProgressPool.getSchedule(code); while (!progress.isCompleted() && !progress.isConceal()) { new Thread() { public void run() { delay = getProgress(code); } }.start(); try { Thread.sleep(delay * 1000); } catch (InterruptedException e) { } if(i++ == 3) { progress.setIsConceal(true); //设置中止标志 } } assertTrue(progress.isConceal()); } long getProgress(String code){ Progress progress = (Progress)ProgressPool.getSchedule(code); if(!progress.isNormal()){ ProgressPool.removeSchedule(code); Throwable t = progress.getException(); throw new BusinessException(t.getMessage()); } if(progress.isConceal()){ System.out.println("取消进度成功"); } Object[] info = progress.getProgressInfo(); System.out.println("已经完成" + info[0] + "%, 本次用时:" + info[1] + "s, 剩余时间" + info[2] + "s"); if(progress.isCompleted()){ ProgressPool.removeSchedule(code); //执行结束则将将进度对象从池中移除 } return ((Long)info[1]); } }