我有一个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.
}
}
}
}
你能指导我怎么做吗
谢谢, 瑞克斯
答案 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。