2010-09-10 78 views
1

我有一個Java程序來讀取輸入文件(input.txt)並打印該文件的內容(之後,我需要做一些更多的工作,即SSH到一臺機器和檢查狀態,發送電子郵件等)。由於input.txt文件具有更多行,因此需要大約3小時才能完成該程序。如何產生一個Java程序,以減少運行時間

因此,喜歡在Java(如線程)或其他一些技術中使用spawn概念來讀取輸入文件並在同一時間執行其他工作(ssh,checkstatus,發送郵件)的過程中,以使程序willl幾乎不用十分鐘就能完成這個項目。

我是Java的新手。你能指導我如何把這個邏輯。我在這裏粘貼了我現在使用的代碼。 input.txt的文件的

實施例:

ABC 

bigboy 72.24.1 72.24.157.57
bejack 2.24.157.97 1.24.157.69 希歐波尼2.24.147.96 9.24.159.86 諷刺7.24.145.93 8.24.209.55

xyz 

alches 2.24.140.199 1.24.140.46

Java程序:

import java.io.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 
import java.util.Calendar; 
import java.net.*; 
import java.net.UnknownHostException; 


public class panic_email{ 
    public static void main(String[] args) throws IOException{ 
    try{ 
     System.out.println ("Starting of program..."); 

     FileInputStream fstream = new FileInputStream("input.txt"); 
     DataInputStream input = new DataInputStream(fstream); 
     BufferedReader bfr = new BufferedReader(new InputStreamReader(input)); 
     String Name = ""; 
     String IP = ""; 

     CSLOOP: while ((FileLine = bfr.readLine()) != null) { 
     FileLine = FileLine.trim(); 
     if (FileLine.startsWith("XYZ")){ 
       System.out.println ("End of program"); 
       break; 
     } 
     if (!FileLine.startsWith("#") && !FileLine.startsWith(" ")){ 
      String splitLine[] = null; 
      splitLine = FileLine.split("\\s+"); 
      if(splitLine.length >= 3){ 
      Name = splitLine[0]; 
      Ip = splitLine[2]; 
System.out.println("Name:" + Name + "IP" + Ip); 
//Here after this I am doing some kind of extra work like ssh,checkstate,send email. So while coming to this point I need to spawn the process i think. 
     } 
     } 

} 

} 

請您指導我如何做到這一點

感謝, 裏克斯

回答

0

爲您的java應用程序添加多路徑支持相當容易。胎面類可以幫助你做到這一點。請參閱http://www.javabeginner.com/learn-java/java-threads-tutorial以獲取簡單教程。

+0

請問我可以讓我知道如何通過名稱,IP到run()方法的基礎上的示例/教程鏈接? – Ricks 2010-09-10 17:41:42

+0

已經有一段時間了,因爲我使用runnable接口,但是我會說用getter和setter在類中添加一些私有變量,並在run方法中使用這些變量。 – 2010-09-10 18:15:40

2

除非您打算更改線程的工作方式,否則不要擴展線程。改爲實現Runnable。您可能還想查看線程池(請參見Executors)。

基本上你應該創建一個實現Runnable的類,並在其run()方法中執行耗時的工作。試着讓這個類封裝一個單獨任務中所需的所有工作(ssh,checkstatus,send mail)。您的程序可以讀取文本文件並創建此任務類的實例並將它們提交給線程池。

請注意,您可能需要節制您的程序,具體取決於;
一)你有多少系統資源有
B)每個任務有多少系統資源要求
c)您將有多少任務運行

節流的一個簡單的方法可能是使用的線程池固定大小。

+0

謝謝qwerky。這個解決方案對我來說也很好。我會試試看。 – Ricks 2010-09-10 16:04:13

+0

我如何在這裏通過我的情況來傳遞名稱,ip到run()方法。 – Ricks 2010-09-10 17:27:40

+0

我打算從main()讀取input.txt文件,並將名稱ip傳遞給runnable方法。即RunnableThread thread3 = new RunnableThread(「thread3」);例如,在這裏,我怎麼能通過我的名字,IP到thread3。請讓我knkow – Ricks 2010-09-10 17:30:28