使用线程击中网址

时间:2017-07-06 10:54:17

标签: java multithreading url

我正在使用线程来命中arrayList中的url。需要将不工作的URL存储在另一个arraylist中。但是,不工作的URL列表每次都会更改。获取格式错误的网址例外。即使对于工作网址也会发生此异常(当尝试手动命中它们时)。

public class ThreadTest {

static int i = 0;
static ArrayList<String> arrayOfNotWorking = new ArrayList<>();

public static void main(String[] args) {
    ArrayList<String> arrayOfUrl = new ArrayList<>();

    ThreadTest threadTest = new ThreadTest();
    arrayOfUrl.add("https://www.parkbus.ca");
    arrayOfUrl.add("https://affectingchange.com/projects/fogo-island-");
    arrayOfUrl.add("https://skoll.socialedge.org/?293@@.1ad86d9e");
    arrayOfUrl.add("https://skollsocialedge.org?293@@.1ad86");
    arrayOfUrl.add("https://www.jitabangladesh.com");
    arrayOfUrl.add("https://www.ngobiz.org/picture/File/Social Enterpeuneur-The Case of Definition.pdf");
    arrayOfUrl.add("https://www.mealshare.ca/en/home/");
    arrayOfUrl.add("https://www.oecd.org/cfe/leed/38870491.pdf");
    arrayOfUrl.add("https://doi.org/10.1787/tour-2016-en");
    arrayOfUrl.add("https://www.youtube.com/user/PlaneterraCares");

    try {
        ExecutorService threadPool = Executors.newFixedThreadPool(arrayOfUrl.size());
        for (i = 0; i < arrayOfUrl.size(); i++) {
            threadPool.submit(new Runnable() {
                public void run() {
                    threadTest.hitUrl(arrayOfUrl.get(i));
                }
            });
        }
        threadPool.shutdown();
        threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
        for (String string : arrayOfNotWorking) {
            System.out.println(string);
        }
    } catch (InterruptedException ex) {
        System.out.println(ex.getMessage());
    }
}

public static void hitUrl(String actualUrl) {
    try {
        URL obj = new URL(actualUrl);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("GET");
        int responseCode = con.getResponseCode();
        if (responseCode > 199 && responseCode < 400) {
        } 
    } catch (Exception ex) {
        arrayOfNotWorking.add(actualUrl);
    }
}

}

2 个答案:

答案 0 :(得分:0)

您已在notWorkingUrl方法中定义了hitUrl,因此每次调用该方法时,变量都会被初始化。

您应该在类中定义String类型的列表,并将不可用的URL添加到该列表中。

答案 1 :(得分:0)

如果使用无效协议或由于有效编码而无法解析url字符串,则抛出java.net.malformedurlexception。

尝试识别此类无效网址的常见问题,然后您可以使用URLEncoder或String类方法格式化此类网址