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)

创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。

实现代码如下:

 

Java代码   收藏代码
  1. package com.cnas.thread;  
  2.   
  3. import java.io.File;  
  4. import java.util.concurrent.Executors;  
  5. import java.util.concurrent.ScheduledExecutorService;  
  6. import java.util.concurrent.TimeUnit;  
  7.   
  8. import com.cnas.csvAnalysis.Analyze;  
  9. import com.cnas.dispatchPool.ListDir;  
  10. import com.cnas.ftp.FTPDownload;  
  11. import com.cnas.global.GlobalsConfig;  
  12.   
  13. /** 
  14.  * 线程池 
  15.  * @author yKF41624 
  16.  * @date 2011-8-26 modified by yang 
  17.  */  
  18. public class StartDispatch {  
  19.     private static File file = new File(GlobalsConfig.getfileuploadFlode());  
  20.     private ScheduledExecutorService sch = Executors.newScheduledThreadPool(1);  
  21.   
  22.     public StartDispatch() {  
  23.         System.out.println("All Threads Started!");  
  24.     }  
  25.     /** 
  26.      * 扫描文件目录线程 
  27.      */  
  28.     public void scanFile() {  
  29.         Runnable runnable = new Runnable() {  
  30.             public void run() {  
  31.                 System.out.println("testfile");  
  32.             }  
  33.         };  
  34.         sch.scheduleWithFixedDelay(runnable, 110, TimeUnit.SECONDS);  
  35.     }  
  36.     /** 
  37.      * 扫描数据库 
  38.      */  
  39.     public void scanDB() {  
  40.         Runnable runnable = new Runnable() {  
  41.             public void run() {  
  42.                 System.out.println("testdb...");  
  43.             }  
  44.         };  
  45.         sch.scheduleWithFixedDelay(runnable, 110, TimeUnit.SECONDS);  
  46.     }  
  47.     public static void main(String[] args) {  
  48.         StartDispatch thread = new StartDispatch();  
  49.         thread.scanFile();  
  50.         thread.scanDB();  
  51.     }  
  52. }