如何生成java程序以减少运行时间

时间:2010-09-10 15:15:53

标签: java

我有一个java程序来读取输入文件(input.txt)并打印该文件的内容(之后我需要做更多的工作,即ssh到机器并检查状态,发送电子邮件等.. )。由于input.txt文件包含更多行,因此需要大约3小时才能完成程序。

所以喜欢在java中使用spawn概念(比如线程)或其他一些技术来在读取输入文件时溢出进程,并在程序将要执行的同时执行其他工作(ssh,checkstatus,send mail)完成该计划的时间不到十分钟。

我是Java的新手。你能指导我如何把这个逻辑。我已经粘贴了我现在的代码。

input.txt文件示例:

  #
    ABC
     #      

bigboy 72.24.1 72.24.157.57
  bejack 2.24.157.97 1.24.157.69   boni 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. 
         }
         }

 }

}

你能指导我怎么做吗

谢谢, 瑞克斯

3 个答案:

答案 0 :(得分:5)

Java非常支持多线程。请阅读Concurrency Section from Java Tutorial

答案 1 :(得分:2)

除非您打算更改Thread的工作方式,否则不要扩展Thread。实现Runnable。您可能还想查看线程池(请参阅Executors)。

基本上,您应该创建一个实现Runnable的类,并在其run()方法中执行耗时的工作。尝试并使该类封装单个任务(ssh,checkstatus,send mail)中所需的所有工作。您的程序可以读取文本文件并创建此任务类的实例,并将它们提交给线程池。

请注意,您可能需要根据以下程序限制程序;
a)你有多少系统资源 b)每个任务需要多少系统资源 c)你将运行多少任务

一种简单的限制方法可能是使用固定大小的线程池。

答案 2 :(得分:0)

为您的Java应用程序添加多线程支持非常容易。 Thread类可以帮助你解决这个问题。有关简单教程,请参阅http://www.javabeginner.com/learn-java/java-threads-tutorial