java Multithreading(newCachedThreadPool),然后将结果写入一个文件?

时间:2011-03-28 11:54:57

标签: java multithreading

我试图用简单的线程做到这一点并成功但我相信使用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个结果文件,然后合并它们,或者它可能只是写入服务器上的一个文件然后下载它?

  1. 如何将此代码转换为线程池?
  2. 如何将数据写入36个线程中的一个文件?

3 个答案:

答案 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任务执行器,它会更容易。但是,如上所述,我还建议使用单个连接。