public class test {
public static final int nThreads = 2;
public static void main(String[] args) throws ExecutionException, InterruptedException{
// Runnable myrunnable = new myRunnable();
ExecutorService execute = Executors.newFixedThreadPool(nThreads);
for (int i = 0; i < nThreads; ++i) {
execute.execute(new MyTask());
}
execute.awaitTermination(1000, TimeUnit.MILLISECONDS);
execute.shutdown();
}
}
class MyTask implements Runnable {
public static final int maxCalls = 10;
public static final int sleepMillis = 500;
private static HttpResponse response;
private static HttpClient httpclient;
public void run(){
int counter = 0;
while (true) {
if (counter >= maxCalls) {
break;
}
try {
Thread.currentThread().sleep(sleepMillis);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
execHttpRequest();
++counter;
}
}
private void execHttpRequest() {
httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("My URL");
try {
response = httpclient.execute(httpget);
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String output;
while((output=br.readLine())!=null){
System.out.println(Thread.currentThread().getName() +output);
}
br.close();
httpclient.getConnectionManager().shutdown();
//httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
httpclient.getConnectionManager().shutdown();
}
}
}
इस कोड चल रहा है, मैं निम्नलिखित अपवाद:मल्टी-थ्रेडिंग httpclient
Exception in thread "pool-1-thread-1" java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216)
at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:190)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at MyTask.execHttpRequest(test.java:72)
at MyTask.run(test.java:60)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
java.io.InterruptedIOException: Connection has been shut down
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:543)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at MyTask.execHttpRequest(test.java:72)
at MyTask.run(test.java:60)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.http.impl.conn.ConnectionShutdownException
at org.apache.http.impl.conn.AbstractPooledConnAdapter.assertValid(AbstractPooledConnAdapter.java:86)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.getRoute(AbstractPooledConnAdapter.java:112)
at org.apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.java:740)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:577)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
... 8 more
जब मैं http अनुरोध पर अमल, तो मैं इन अपवाद देखें। यह सिंगल-थ्रेडेड के लिए पूरी तरह से ठीक काम करता है। मैं एक विशिष्ट यूआरएल (जो पूरी तरह से ठीक काम करता है) को कॉल करने की कोशिश कर रहा हूं, लेकिन जब मैं इसे एक से अधिक धागे जोड़ता हूं, तो यह एक अवैध राज्य अपवाद फेंकता है।
स्टैकट्रैस पढ़ने के लिए जानें। – mre