直接上代码,就几行代码
package util; import other.IPBean; /** * @author Asche * @github: https://github.com/asche910 * @date 2019年1月19日 */ public class ProxyUtils { /** * 设置全局代理 * @param ipBean */ public static void setGlobalProxy(IPBean ipBean){ System.setProperty("proxyPort", String.valueOf(ipBean.getPort())); System.setProperty("proxyHost", ipBean.getIp()); System.setProperty("proxySet", "true"); } }需要注意一点就是全局只是在该java项目中生效,它不会更改系统中的代理。
优化emmm 优化些啥呢???
速度爬取ip时就几个网页,优化估计效果不大。而真正耗时的是检测ip是否有效,因此这里采用多线程,对每个ip的检测请求使用一个线程,最后副线程全部结束后再统计出有多少有效ip。然而问题又来了,怎么判断所有副线程全部结束了呢??? 脑中立刻想到的是join方法,然而仔细想想,才发现这样并不可取。最佳方法应该是设置一个计数器,每个线程结束后计数器加一,然后在主线程循环判断计数器的值是否与线程总数相等即可。由于涉及到并发,需要给某些方法加上锁。这里我代码中实现了,可以参考github