我的程序是每当我启动我的 AccelSender 程序时,它都会将 epnId 发送到我的服务器机器以请求该特定 epnId 的主机。当服务器返回 hostName 时,它会启动两个 Runnable Thread 类,名为new DataTransmitter(hostName,epnId)
和 new JMSConnection()
。
我想要做的是每当我reStart(String hostName)
被调用时,我想停止new DataTransmitter(hostName,epnId)
线程并通过设置新的主机名来启动它。
这是我的代码:
public class AccelSender {
private Socket kkSocket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private static final String epnId = "EPN1";
public AccelSender(){
}
public void requestHost(){
try{
Socket hostSocket = new Socket("10.3.2.227",1121);
PrintWriter out = new PrintWriter(hostSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(hostSocket.getInputStream()));
out.println(epnId);
while(true){
String hostName = in.readLine();
DataTransmitter dt = new DataTransmitter(hostName,epnId);
JMSConnection jms = new JMSConnection();
new Thread(dt).start();
new Thread(jms).start();
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void reStart(String hostName){
//Here i want to STOP the DataTransmitter Thread and,
START with new hostName
}
}
Runnable 类的代码:
public class DataTransmitter implements Runnable {
private Socket kkSocket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private int port = 2508, fileCount = 0, arrivalRate = 500;
private String hostName = null, data = null, filename = null;
private boolean resetSender = false;
private static String epnId = null;
File folder = new File(System.getProperty("user.dir")+"/input_data");
File[] listOfFiles = folder.listFiles();
public DataTransmitter(){
}
public DataTransmitter(String hostName, String epnId){
this.hostName = hostName;
this.epnId = epnId;
establishHostConnection();
}
public void establishHostConnection(){
try {
kkSocket = new Socket(hostName, port);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(kkSocket.getInputStream()));
resetSender = true;
} catch (UnknownHostException e) {
System.err.println("Don't know about host: thinklatch.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to:
thinklatch.");
System.exit(1);
}
}
public void close() throws IOException{
kkSocket.close();
out.close();
in.close();
}
public void run(){
System.out.println("Entering Data Transmitter");
try{
while (fileCount <= 1) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println("File " +
listOfFiles[i].getName());
filename = System.getProperty("user.dir") +
"/input_data/" + listOfFiles[i].getName();
BufferedReader bf = new BufferedReader(new
FileReader(filename));
System.out.println("Fetching input from : " +
filename);
while((data=bf.readLine())!=null){
String str =
this.hostName+","+this.epnId+","+arrivalRate+","+data;
out.println(str);
try{
TimeUnit.MILLISECONDS.sleep(2);
}catch(Exception e){
}
}
}
}
fileCount++;
}
}catch(FileNotFoundException fnfe){
System.err.println("E"+fnfe);
}catch(IOException ioe){
System.err.println("E"+ioe);
}
out.close();
}
}
针对这种情况重新启动线程的任何建议都是可观的。提前致谢 ....