Java 运行完成后调用线程对象方法
我正在编写一个类,它在一个单独的线程上读取远程文件数据 这个类从线程继承并在run方法中读取一些远程文件数据 我可以添加其他返回此数据字符串的方法吗 在run方法返回后,我看到isalive返回假值 我需要使用事件机制吗 请建议一些更好的解决方法。对于您的情况,我会使用a,例如Java 运行完成后调用线程对象方法,java,multithreading,jvm,Java,Multithreading,Jvm,我正在编写一个类,它在一个单独的线程上读取远程文件数据 这个类从线程继承并在run方法中读取一些远程文件数据 我可以添加其他返回此数据字符串的方法吗 在run方法返回后,我看到isalive返回假值 我需要使用事件机制吗 请建议一些更好的解决方法。对于您的情况,我会使用a,例如 Callable<String> callable = new Callable<String>() { @Override public String call() throw
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
// do your work here and return the result
return "Hello";
}
};
Way#1
改为使用,并从中获取此字符串
在此处检查返回字符串的
像这样:
public class GetDataCallable implements Callable<String> {
@Override
public String call() throws Exception {
return getDataFromRemote(); //get from file and returns
}
}
但是,在调用getData()之前,必须确保线程已完成,例如,可以使用thread.join()来完成此操作
thread.start()
..//some jobs else
thread.join();
String data=thread.getData();
Way#3
在run()结束时使用一些静态回调方法
说
从线程
继承是一种不好的做法。将您的代码放入一个Runnable
。Jaskey,谢谢。当run方法完成时,thread对象的isalive为false。即使isalive为false,我也可以调用getData方法吗?@ramu,我没有尝试过,请检查这里
public class GetDataCallable implements Callable<String> {
@Override
public String call() throws Exception {
return getDataFromRemote(); //get from file and returns
}
}
GetDataCallable <String> task = new GetDataCallable <String>();
ExecutorService service = Executors.newFixedThreadPool(1);
Future<String> future =service.submit(task);//run the task in another thread,
..//do any thing you need while the thread is runing
String data=future.get();//Block and get the returning string from your Callable task
public youThread extends Thread{
private String data;//this is what you need to return
@Override
public void run(){
this.data=//get from remote file.
}
public String getData(){
return data;
}
}
thread.start()
..//some jobs else
thread.join();
String data=thread.getData();
public Class StoreDataCallback{
public static void storeData(String data_from_thread){
objectCan.setData(data_from_thread);//get access to your data variable and assign the value
}
}
public Class YourThread extends Thread{
@Override
public void run(){
String data =getDataFromRemote();//do some thing and get the data.
StoreDataCallback.storeData(data);
}
}