0
下面的代碼似乎不平行地運行,但在發出其他甚至要求在每個單獨的線程AWAIT()方法後一個請求。有人可以幫助使這個線程並行調用。的CyclicBarrier勞克並行線程執行不同的邏輯
public class XYZ {
private static String baseUrl = "http://xyz.polls.com";
public static void main(String[] args) {
MultiThreadedHttpConnectionManager conMgr =new MultiThreadedHttpConnectionManager();
HostConfiguration hostConf = new HostConfiguration();
hostConf.setHost("xyz.polls.com");
HttpConnectionManagerParams connParam = new HttpConnectionManagerParams();
connParam.setMaxConnectionsPerHost(hostConf, 5);
connParam.setMaxTotalConnections(5);
conMgr.setParams(connParam);
HttpClient client = new HttpClient(conMgr);
client.setHostConfiguration(hostConf);
CyclicBarrier cyclicBarrier = new CyclicBarrier(1, new Runnable() {
private int count = 1;
public void run() {
System.out.printf("Cyclic Barrier Finished %d\n", count++);
}
});
System.out.println("Spawning Threads");
for(int i = 0; i < 1; i++){
Thread t1 = new Thread(new UpdateProfile(cyclicBarrier, client));
t1.start();
Thread t2 = new Thread(new UpdateAccount(cyclicBarrier, client));
t2.start();
}
System.out.println("Spawning Finished");
}
private static class UpdateAccountThread implements Runnable{
private CyclicBarrier cyclicBarrier;
private HttpClient httpClient;
public UpdateAccountThread(CyclicBarrier cyclicBarrier, HttpClient httpClient){
this.cyclicBarrier = cyclicBarrier;
this.httpClient = httpClient;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try{
int count = cyclicBarrier.await();
System.out.println("UpdateAccountThread : Cyclic Barrier count on " +count);
updateAccount(httpClient);
}catch (BrokenBarrierException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static class UpdateProfileThread implements Runnable{
private CyclicBarrier cyclicBarrier;
private HttpClient httpClient;
public UpdateProfileThread(CyclicBarrier cyclicBarrier, HttpClient httpClient){
this.cyclicBarrier = cyclicBarrier;
this.httpClient = httpClient;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try{
int count = cyclicBarrier.await();
System.out.println("UpdateProfileThread : Cyclic Barrier count on " +count);
updateProfile(httpClient);
}catch (BrokenBarrierException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static void updateProfile(HttpClient client){
// logic here
}
private static void updateAccount(HttpClient client){
// logic here
}
}