2011-03-28 70 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

相關問題