2011-03-28 71 views
0

我试图用简单的线程做到这一点,并成功,但我相信使用线程池我可以做更有效的相同的事情:)? 简单线程:java多线程(newCachedThreadPool),然后将结果写入一个文件?

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个执行命令(使用线程池/ simplethreads?!)在同一时间,要么下载36个结果文件,比合并它们,或者它可能只写入服务器上的一个文件,然后下载它?

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

回答

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

+0

thx这是+ - 我在找什么:) – user615927 2011-03-28 13:52:32

1

目前还不清楚你想要做什么。我的想法是,创建36个独立的连接到服务器将是一个相当大的负载,它可能没有。

服务器可以自己组装这36个文件并看看线程本身吗?这似乎是一个更合乎逻辑的职责分工。服务器将知道这项工作是如何并行化的,并且对服务器提供多重连接服务(包括可能阻塞其他客户端)有重大影响。

+0

该服务器实际上是一个大型服务器,有许多工作负载甚至更多的服务器,并且我在工作负载中进行搜索,因此最好按照我的方式进行搜索(否则无法完成)。所以我的主要问题是如何将该代码转换为线程池,如果这是一个好主意?和天气我应该从36组装一个文件或只写一个以及如何:)? – user615927 2011-03-28 12:28:17

+0

@ user615927,为什么要使用完全36个线程?它应该取决于系统上可用的处理器数量。要找到它的编号,你可以使用下面的代码:int count = Runtime.getRuntime()。availableProcessors(); – Alexandr 2011-03-28 12:53:34

+0

@Alexandr 36因为最大线程数取决于我必须做的事情...所以你想告诉我,我不能同时启动36个线程:)? – user615927 2011-03-28 13:51:50

0

一个简单的方法来做到这一点用java任务执行,具体如下:

ExecutorService executor = Executors.newFixedThreadPool(100); 
for(int i=0;i<100;i++) 
{ 
    executor.execute(new Runnable(i)); 
} 

你也可以使用Spring任务执行,它会更容易。但是,如上所述,我还会建议使用单个连接。

+0

令人毛骨悚然的例子:),在阅读本文之前,我搜索了一个类似的帖子和简单例子的答案,因为这个代码是1540行,可能是老兄认为这很简单:D – user615927 2011-03-28 13:57:41

相关问题