import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; /* * Java线程池例子 */ public class ThreadPoolTest { public static void main(String[] args) throws InterruptedException { ThreadPoolTest t = new ThreadPoolTest(); List<FTPInfo> ftpList = t.getFTPInfoList(); Date start = new Date(); //创建线程池 ExecutorService pool = Executors.newFixedThreadPool(5); //将线程放入池中进行执行 for(int i=0;i<ftpList.size();i++){ Thread thread = new ConnectToFTP(ftpList.get(i)); pool.execute(thread); } //关闭线程池 pool.shutdown(); //30秒之内没有执行完成则强制关闭 pool.awaitTermination(30, TimeUnit.SECONDS); //查看程序运行时间 System.out.println("time:"+((new Date().getTime()-start.getTime()))); } //取得FTP的IP信息列表 public List<FTPInfo> getFTPInfoList(){ List<FTPInfo> lst = new ArrayList<FTPInfo>(); lst.add(new FTPInfo("192.168.0.1","user01","pwd01","folder")); lst.add(new FTPInfo("192.168.0.2","user02","pwd02","folder")); lst.add(new FTPInfo("192.168.0.3","user03","pwd03","folder")); lst.add(new FTPInfo("192.168.0.4","user04","pwd04","folder")); lst.add(new FTPInfo("192.168.0.5","user05","pwd05","folder")); lst.add(new FTPInfo("192.168.0.6","user06","pwd06","folder")); lst.add(new FTPInfo("192.168.0.7","user07","pwd07","folder")); lst.add(new FTPInfo("192.168.0.8","user08","pwd08","folder")); lst.add(new FTPInfo("192.168.0.9","user09","pwd09","folder")); lst.add(new FTPInfo("192.168.0.10","user10","pwd10","folder")); lst.add(new FTPInfo("192.168.0.11","user11","pwd11","folder")); lst.add(new FTPInfo("192.168.0.12","user12","pwd12","folder")); lst.add(new FTPInfo("192.168.0.13","user13","pwd13","folder")); lst.add(new FTPInfo("192.168.0.14","user14","pwd14","folder")); lst.add(new FTPInfo("192.168.0.15","user15","pwd15","folder")); return lst; } } //从FTP取得数据 class ConnectToFTP extends Thread{ private FTPInfo info; ConnectToFTP(FTPInfo info){ this.info = info; } @Override public void run() { int tryCount = 0;//处理次数 final int retryMax = 3;//重试的最大次数 do{ System.out.println("["+Thread.currentThread().getName()+"] connect to "+info.getIp()+"/"+info.getFolder()+" user:"+info.getUser()+" password:"+info.getPwd()); try { //执行主要操作 boolean isSuccess = doSomething(); //处理失败时等待重试 if(isSuccess){ tryCount ++;//重试次数累加 Thread.sleep(5000);//等待五秒 } else{ break; } } catch (InterruptedException e) { e.printStackTrace(); } } while(tryCount<retryMax); } //主要操作 public boolean doSomething() throws InterruptedException{ System.out.println("do something..."); Thread.sleep(2000); return true; } } //FTP对象 class FTPInfo{ private String ip = ""; private String user = ""; private String pwd = ""; private String folder = ""; FTPInfo(String ip,String user,String pwd,String folder){ this.ip = ip; this.user = user; this.pwd = pwd; this.folder = folder; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getFolder() { return folder; } public void setFolder(String folder) { this.folder = folder; } }