www.pudn.com > network-java.rar > IPSaving.java
package netManager.discovery; /** *Title: PingIP
*Description: 利用JDK1.5中的线程池对象 * 调用IPSavingThread线程保存所有在线IP地址到数据库
*Copyright: Copyright (c) 2006
*Company:
* @author:谢飞 * @version 1.0 */ import java.util.Vector; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.Future; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import netManager.util.ConnDB; import java.sql.Connection; import netManager.framework.exception.BaseException; public class IPSaving{ private Vector allIP; //最大在线主机集合 private Vector onlineIP; //当前在线主机集合 private int poolSize; //定义线程池大小(池中线程数) private ThreadPoolExecutor threadPool; //定义线程池对象 private Executors executors; //改类中定义了创建线程池的工厂 private Log log = LogFactory.getLog("IPSaving"); private int amount; //在线主机数量 private boolean flag; //标识线程池是否完成工作 public IPSaving(int poolSize) throws BaseException{ amount = 0; onlineIP = new Vector(); allIP = DiscoveryUtil.getPingIP(); this.poolSize = poolSize; this.flag = false; //System.out.println("开始主机发现...."); } public synchronized void setFlag(boolean flag){ this.flag = flag; } //统计在线主机数 public synchronized void amountAdding(int i){ amount = amount + i; } //保存到集合 public synchronized void getIP(String IP){ this.onlineIP.addElement(IP); } /** *将在线IP地址保存到数据库 */ public void saveIP() throws BaseException{ ConnDB condb = new ConnDB(); Connection con = condb.getconn(); for(int i=0; i < onlineIP.size(); i++ ){ String sql = "insert into HostIP values(IPseq.Nextval,'" + (String)onlineIP.elementAt(i)+ "')"; condb.execute(sql,con); } condb.close(con); } public int getAmount(){ return amount; } public void savingIP() throws Exception { try{ String str; threadPool = (ThreadPoolExecutor)executors.newFixedThreadPool(poolSize);//工厂模式创建线程池 for(int i=0; i < allIP.size(); i++ ){ String hostIP = (String)allIP.elementAt(i); //hostIP-需要Ping的IP地址,从集合中取出 threadPool.execute(new PingThread(hostIP,this)); //把hostIP通过线程池传递给处理线程 } threadPool.shutdown(); //关闭线程池 //在主线程等待线程池完成任务 while(threadPool.isTerminated() == false){ Thread.sleep(50); } this.saveIP(); //System.out.println("主机发现完毕!"); //System.out.println("发现在线主机数:" + this.getAmount()); } catch(Exception e){ threadPool.shutdown(); //e.printStackTrace(); log.error(e); throw e; } } }