如何与线程进行参数传递????????(100分)

  • 主题发起人 主题发起人 huangyechun
  • 开始时间 开始时间
H

huangyechun

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我的一个应用程序(server.java)需要调用一个线程(MonitorThread.java),
通过这个线程监测到一定的信息,想把它传回主程序(server.java)中,怎样来
传递呢???
假定这个信息是一个字符串String_info,请大家帮忙!!!!
 
一样的原理吧,在class中定义全局变量,线程执行完后,返回这个值就行了,server,ava调
用这个class。
 
同意楼上的说法。我在补充两点:
解决从线程返回信息的问题:
1、轮询(Polling):
使用获取方法返回一个标志值(或可能触发一个异常)直到结果字段置值;
然后主线程周期的轮询获取的方法,以判断该方法是否返回了标志值以外的其他值。例如:
===============================================================================
线程:MonitorThread
public class MonitorThread extends Thread{
private File input;
private byte[] digest;
public MonitorThread(File input) {
this.input = input;
}
public void run(){
try{
FileInputStream in = new FileInputStream(input);
java.security.MessageDigest sha = MessageDigest.getInstance("SHA");
java.security.DigestInputStream din = new java.security.DigestInputStream(in,sha);
int b;
while((b = din.read()) != -1);
din.close();
digest = sha.digest();
}
catch(IOException e){
System.err.println(e);
}
catch(java.security.NoSuchAlgorithmException e){
System.err.println(e);
}
}
//此处提供方法,从线程中返回信息
public byte[] getDigest(){
return this.digest;
}
}
===============================================================================
主程序:Server
public class Server{
public void main(String args[]){
MonitorThread[] monitorThread = new MonitorThread(args.length);
for(int i=0;i<args.length;i++){
File f = new File(args[]);
digest = new MonitorThread(f);
digest.start();
}
for(int i=0;i<args.length;i++){
while(true){
byte[] digest = digest.getDigest();
if(digest!=null){
for(int j=0;j<digest.length;j++)
StringBuffer result = new StringBuffer(digest[j]);
result.append("文件摘要为:" + result.toString());
}
}
}
}
}
以上为当从线程返回信息时,不断的判断文件摘要是否为null,如果文件摘要不为null时则使用该摘要
 
2、回调(Callback)
此方法更为简单、有效。线程通过调用一个主类中的方法来实现这个技术,该方法是由Server主类启动的。当
线程完成任务时,会回调他的创建者。通过回调方法,主程序可以在等待线程结束任务时进行休眠,并且不会
掠夺运行的线程时间。
public class MonitorThread implements Runnable{
private File input;
private byte[] digest;
private Server server;
public MonitorThread (File input,Server server){
this.input = input;
this.server = server;
}

public void run(){
try{
FileInputStream in = new FileInputStream(input);
java.security.MessageDigest sha = MessageDigest.getInstance("SHA");
java.security.DigestInputStream din = new java.security.DigestInputStream(in,sha);
int b;
while((b = din.read()) != -1);
din.close();
digest = sha.digest();
server.receiveDigest(digest);

}
catch(IOException e){
System.err.println(e);
}
catch(NoSuchAlgorithmException e){
System.err.println(e);
}
}
}
====================================================================
public class Server {
private File input;
private byte[] digest ;
public Server(File input){
this.input = input;
}
public void begin
Digest(){
MonitorThread monitorThread = new MonitorThread(inpu,this);
Thread t = new Thread(monitorThread);
t.start();
}
public String toString(){
String result = input.getName() + ":";
if(digest!=null){
for(int i=0;i<digest.length;i++){
result +=digest + "";
}
}
return result;
}
public static void main(String args[]){
for(int i=0;i<args.length;i++){
File file=new File(args);
Server server = new Server(file);
server.begin
Digest();
}
}
}
终于写完了,希望对您有所帮助吧![:)]
 
非常感谢两位大虾!!!!!
小弟受益匪浅。
先保留这个问题,让大家都来看看。
分一定为您俩留着:)
 
多人接受答案了。
 
后退
顶部