一.延時線程池-遞增延時執(zhí)行任務(wù)
創(chuàng)建延時線程池往衷,讓任務(wù)獲取該線程池般又,當(dāng)任務(wù)執(zhí)行失敗時布隔,根據(jù)自身算法將自身任務(wù)改變延時時間后再次放入延遲線程池霎匈,此例子僅是簡單思路與流程
public class mao {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(9);
scheduledExecutorService.schedule(new RunMao("任務(wù)1",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)2",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)3",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)4",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)5",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)6",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)7",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)8",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.schedule(new RunMao("任務(wù)9",5,5,20,scheduledExecutorService),10, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();
}
}
class RunMao implements Runnable{
private String name ;
private int count = 1;
private int loalTime;
private int everyTime;
private int maxTime;
private ScheduledExecutorService scheduledExecutorService;
public RunMao(String name, int loalTime,int everyTime,int maxTime,ScheduledExecutorService scheduledExecutorService){
this.name = name;
this.loalTime = loalTime;
this.everyTime = everyTime;
this.scheduledExecutorService = scheduledExecutorService;
this.maxTime = maxTime;
}
@Override
public void run() {
System.out.println("任務(wù)名---:" + name+"線程名:"+Thread.currentThread().getName()+"第"+count+"次通知"+",當(dāng)前延時"+loalTime+",每次延遲時間"+everyTime+" 最長延時時間"+maxTime);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(loalTime < maxTime){
loalTime+= everyTime;
loalTime = loalTime > maxTime ? maxTime : loalTime;
count++;
scheduledExecutorService.schedule(this,loalTime, TimeUnit.SECONDS);
}else{
System.out.println("任務(wù)名---:" + name +"任務(wù)完全結(jié)束");
}
System.out.println("--------------------------------------------------------------");
}
}