Java启动多线程,同时启动几个没有关系的任务
最近在和线程打交道,要同时启动多个线程,并且每个线程要做不同的任务,最开始,我用的是Thread,写了几个main函数来start,不过我现在发现这个方法我觉得很水,所以翻了下java的API,看到了ScheduledExecutorService这个类里面有个线程池的方法,很给力的样子,于是我就试了试。
这个类里面主要就是两个方法:
1.scheduleAtFixedRate(Runnable command,?long initialDelay,long period,TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。如果任务的任一执行遇到异常,都会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
2.scheduleWithFixedDelay(Runnable command,long initialDelay,?long delay,TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
实现代码如下:
?
package com.cnas.thread;import java.io.File;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import com.cnas.csvAnalysis.Analyze;import com.cnas.dispatchPool.ListDir;import com.cnas.ftp.FTPDownload;import com.cnas.global.GlobalsConfig;/** * 线程池 * @author yKF41624 * @date 2011-8-26 modified by yang */public class StartDispatch {private static File file = new File(GlobalsConfig.getfileuploadFlode());private ScheduledExecutorService sch = Executors.newScheduledThreadPool(1);public StartDispatch() {System.out.println("All Threads Started!");}/** * 扫描文件目录线程 */public void scanFile() {Runnable runnable = new Runnable() {public void run() {System.out.println("testfile");}};sch.scheduleWithFixedDelay(runnable, 1, 10, TimeUnit.SECONDS);}/** * 扫描数据库 */public void scanDB() {Runnable runnable = new Runnable() {public void run() {System.out.println("testdb...");}};sch.scheduleWithFixedDelay(runnable, 1, 10, TimeUnit.SECONDS);}public static void main(String[] args) {StartDispatch thread = new StartDispatch();thread.scanFile();thread.scanDB();}}??