我试图用简单的线程做到这一点并成功但我相信使用Threadpool我可以更有效地做同样的事情:)? 简单的线程:
public static class getLogFile implements Runnable {
private String file;
public void setFilename(String namefile){
file=namefile;
}
public int run1(String Filenamet) {
connectToServer(XXX, Filenamet, XXX, XXX, XXX, XXX);//creates a file and downloads it
return 0;
}
public void run() {
run1(file);
}
}
in main:
for(x=0 ; x < 36 ; x++){
String Filename1=Filename+x;
getLogFile n=new getLogFile();
n.setFilename(Filename1);
(new Thread(n)).start();
}
程序连接到服务器同时执行36个命令(使用threadpool / simplethreads?!)并下载36个结果文件,然后合并它们,或者它可能只是写入服务器上的一个文件然后下载它?
答案 0 :(得分:1)
目前尚不清楚自己想做什么。我的想法是,创建36个与服务器的独立连接将是一个相当大的负载,它可以没有。
服务器可以自己组装这36个文件并管理线程本身吗?这似乎是更合乎逻辑的职责划分。服务器将了解这项工作的并行性,并且对服务多个连接的服务器产生重大影响(包括可能阻止其他客户端)。
答案 1 :(得分:1)
我只能为你提供指示。
要使用线程池,请查看ServiceExecutor的工作原理。来自Google的任何示例都会为您提供足够的信息。举个例子来看看: http://www.deitel.com/articles/java_tutorials/20051126/JavaMultithreading_Tutorial_Part4.html
关于将36个线程写入其自己的文件,或写入一个文件。我不能说几个线程写入同一个文件,但是当所有线程完成写入时,你可以使用CyclicBarrier来等待事件。您可以在此处找到它的使用示例: http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CyclicBarrier.html
答案 2 :(得分:0)
使用java任务执行程序执行此操作的简单方法,如下所示:
ExecutorService executor = Executors.newFixedThreadPool(100);
for(int i=0;i<100;i++)
{
executor.execute(new Runnable(i));
}
你也可以使用spring任务执行器,它会更容易。但是,如上所述,我还建议使用单个连接。