读书人

java多线程组件3:ScheduledThreadPool

发布时间: 2012-08-10 12:19:33 作者: rapoo

java多线程组件三:ScheduledThreadPoolExecutor

在实际的情况中可能会需要有的线程是定期执行的,有的线程是只执行一次,如果通过Timer去触发,会涉及线程的切换以及线程安全问题,这对这种情况从jdk1.5开始添加了ScheduledThreadPoolExecutor 组件,这种组件主要就是用来解决前面出现的问题,通过这个组件即可以定期的去执行一个任务,也可以只执行一次,也可以把这两种情况一起使用,为了演示这个组件的使用,写了一个非常简单的小例子:

package com.eric.concurrency;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ScheduledExecutorSample {/** * The ScheduledThreadPoolExecutor provides just the service necessary to * solve the problem. Using either schedule( ) (to run a task once) or * scheduleAtFixedRate( ) (to repeat a task at a regular interval), you set * up Runnable objects to be executed at some time in the future. *  * @param args */public static ScheduledThreadPoolExecutorse= new ScheduledThreadPoolExecutor(10);public static void main(String[] args) {ScheduledExecutorSample ss = new ScheduledExecutorSample();ss.schedule("begin");ss.fixedPeriodSchedule();ss.schedule("end");}class Schedule implements Runnable {private Stringname;public Schedule(String name) {this.name = name;}public void run() {System.out.println("Schedule" + name);}}class FixedSchedule implements Runnable {public void run() {System.out.println("Fixed period schedule");}}public void schedule(String name) {// 设定值执行一次的runnablese.schedule(new Schedule(name), 0, TimeUnit.SECONDS);}public void fixedPeriodSchedule() {// 设定可以循环执行的runnable,任务的间隔为1秒se.scheduleAtFixedRate(new FixedSchedule(), 0, 1, TimeUnit.SECONDS);}}



读书人网 >编程

热点推荐