#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(){