2011-12-01 3 views
2

Je dois créer un pool de threads de taille fixe et utiliser le thread pour chaque requête http. Quelqu'un peut-il spécifier comment faire cela?Comment utiliser les threads d'un pool de threads pour chaque requête http en Java?

Merci à l'avance

Le code est

HttpGet httpGet = new HttpGet(url); 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse httpResponse = httpClient.execute(httpGet); 
    return httpResponse; 

Ici, je dois utiliser le fil de pool de threads pour chaque HttpResponse

+0

Est-ce que cela signifie que vous voulez créer un pool pour l'objet httpClien? – Sap

Répondre

0

Vous pouvez utiliser Huissiers et de transmettre votre propre Runnable qui traitera votre httpResponse. Extrait de code:

public class MyHttpResponseHandler implements Runnable { 

    private HttpResponse httpResponse = null; 

    public MyHttpResponseHandler(HttpResponse httpResponse){ 
     this.httpResponse = httpResponse; 
    } 
    @Override 
    public void run() { 
     //Do something with the httpResponse 
    } 
} 

void processHttpResponse(){ 
    HttpGet httpGet = new HttpGet(url); 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse httpResponse = httpClient.execute(httpGet); 
    ExecutorService executor = Executors.newFixedThreadPool(10); 
    executor.execute(new MyHttpResponseHandler(httpResponse)); 
} 
1

Vous devriez probablement créer un FixedThreadExecutor http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)

puis créez une Runnable tâches http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html

et de les exécuter dans l'exécuteur via sumbit() ou executeAll() fonction http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html

Peut-être que vous s Houdl faire le HttPRequest dans le fil aussi. Et marquer ceci comme un devoir (il sent comme un)