ScheduledThreadPool 为定时任务线程池
1)定义任务线程
public class Task implements Runnable {
private String name;
Task(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " Start." + name);
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " End.");
}
@Override
public String toString() {
return this.name;
}
}
2)线程池
public class ScheduledThreadPoolTest {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
try {
for (int i=0; i<3; i++) {
TimeUnit.SECONDS.sleep(5);
Task task = new Task(i + "");
scheduledThreadPool.schedule(task, 2, TimeUnit.SECONDS);
}
TimeUnit.SECONDS.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduledThreadPool.shutdown();
while(!scheduledThreadPool.isTerminated()){
}
System.out.println("all threads finished");
}
}3)ScheduledExecutorService还有另外两个方法
scheduledThreadPool.scheduleAtFixedRate(task, 2, 5, TimeUnit.SECONDS);
# 每5s执行一次线程,每次线程延后2s
scheduledThreadPool.scheduleWithFixedDelay(task, 2, 5, TimeUnit.SECONDS);
# 延迟5s执行线程,再延迟2s
版权声明:本文为suoyx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。