Java — Соединение URL в потоках

#java #multithreading #url #connection

#java #многопоточность #url #подключение

Вопрос:

В настоящее время у меня есть проект, в котором из онлайнового CGI-файла запрашиваются разные параметры, и предполагается, что каждый запрос обрабатывается в разных потоках. Когда я запускаю свой код сам по себе, он отлично работает, однако, похоже, он не подключается, когда я помещаю его в поток. Мой код приведен ниже:

 public void run() {
    connect();
}


public synchronized void connect(){
    StringBuffer response = new StringBuffer("");
    try {

        String data = "year="   year   "amp;top="   numNames   "number=";
        // Send data
        URL url = new URL("http://www.ssa.gov/cgi-bin/popularnames.cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;

        while ((line = rd.readLine()) != null) {
            response.append(line);
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
        System.out.println(e);
    }
System.out.println(response);
        }
    }
  

Комментарии:

1. Если connect метод принадлежит экземпляру объекта, который используется более чем одним потоком, одновременно будет выполняться только один, но я подозреваю, что это не то, что вы намеревались спросить. OTOH, если connect ничего не изменяет вне себя, возможно, для этого нет причин synchronized .

Ответ №1:

Удалите синхронизированный вызов при подключении. Это должно решить вашу проблему

общедоступный синхронизировано void connect(){