「test.com」に 0 から 100 までのリクエストを送信したいのですが、コードは 1 秒ごとにリクエストを送信します。このようにすると、プログラムが完了するまでに 100 秒かかります。
私がやりたいことは、10 個のスレッドを同時に実行するように設定し、スレッド 1 を (0,10) から開始することです。(10,20) からのスレッド 2 ... など、このようにして、プログラムは完了するまでに 10 秒程度しかかからないはずですが、それは可能ですか? どうすれば達成できますか?
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
public class Palomo implements Runnable {
String url = "http://test.com";
HttpClient client = null;
PostMethod method = null;
BufferedReader br = null;
String contents = null;
public void run() {
for (int i = 0; i <= 100; i++) {
synchronized (this) {
doPost(i);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void doPost(int i) {
try {
client = new HttpClient();
method = new PostMethod(url);
this.method.addParameter("myPostRequest", Integer.toString(i));
client.executeMethod(method);
} catch (Exception e) {
e.printStackTrace();
} finally {
method.releaseConnection();
}
}
public static void main(String[] args) {
new Thread(new Palomo()).start();
}
}
どうもありがとう !
編集
あなたが私に与えた指示を読んで、私はこの恐ろしいモンスターを作成しました...
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SimpExec {
public static void main(String args[]) {
ExecutorService es = Executors.newFixedThreadPool(4);
es.execute(new MyThread("A"));
es.execute(new MyThread("B"));
es.execute(new MyThread("C"));
es.execute(new MyThread("D"));
es.shutdown();
}
}
class MyThread implements Runnable {
String name;
MyThread(String n) {
name = n;
new Thread(this);
}
public void run() {
if (name=="A"){
for (int i=1;i<=10;i++){
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (name=="B"){
for (int i=10;i<=20;i++){
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (name=="C"){
for (int i=20;i<=30;i++){
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (name=="D"){
for (int i=30;i<=40;i++){
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
これはおそらくあなたがこれまでに見た中で最もひどいコードであることはわかっていますが、私が望むものを正確に作成しています.これを正しい方法で達成する方法についていくつかの指示を与えることができれば、それは素晴らしいことです.
素晴らしいアドバイスをありがとうございました