我有一个java类:
public class httpd implements Runnable
{
public void createHttpdStatistics
{
httpdStatistics stats = new httpdStastics(this);
}
}
现在我将在另一个类中获取httpd中创建的对象stats
。当httpd对象启动时,它在jvm中执行。我想在httpd类中构建get方法但是当我在另一个类中时,我如何获得确切的httpd对象来调用get方法来检索stats对象?
修改
public class httpd implements Runnable
{
public static void main(String[] args)
{
httpd server = new httpd();
OtherClass oc = new OtherClass(server);
}
{
MY OWN MAIN
public class myownmain
{
public static void main(String[] args)
{
//Here I need OtherClass object created in httpd class
}
}
答案 0 :(得分:0)
鉴于已发布的代码here:
在您的其他课程中,例如说OtherClass
,您应该拥有httpd
对象的setter,或者在httpd
构造函数中提供OtherClass
实例。这种方式OtherClass
将引用httpd
public class OtherClass{
httpd httpd_ = null;
public OtherClass(httpd httpd_){
this.httpd_ = httpd_;
}
// Access and use stats from httpd
public void useStats(){
httpdStatistics stats = httpd_.getStatistics()
if(stats != null){
// Do something here
}else{
// stats not set yet, the thread did probably not start yet
}
}
}
在您的应用程序主页中,您可以拥有以下内容:
httpd h = new httpd();
OtherClass otherClass = new OtherClass(h);
编辑正如其中一条评论所述,stats
变量在两个线程之间共享,因此您必须对其进行同步并确保以独占方式更新。
答案 1 :(得分:0)
通过在类httpd中为stats对象提供一个getter来传递将stats对象传递给CTOR中需要的其他类的问题是什么?
这只是当然如果createHttpdStatistics方法没有在run方法的代码中执行(我建议你的pvovide)。
如果createHttpdStatistics方法在run方法中执行(在不同的线程中),你应该考虑在线程之间有一个共享数据结构(例如 - 可以用作共享数据结构的共享Singletone),如果你想创建线程内的HttpdStatistics对象。
在这种情况下,代码将如下所示:
public class httpd implements Runnable
{
public void createHttpdStatistics()
{
httpdStatistics stats = new httpdStastics(this);
StatsManager.getInstance().putStats(stats);
}
public void run() {
//I assume the creation is done at the run method. Maybe I'm wrong here.
createHttpdStatistics();
}
}
然后在代码中的某处使用它 -
HttpdStatistics stats = StatsManager.getInstance().getStats();
MyClass stats = new MyClass(stats); //passing stats to another object.
当然,您应该确保将stats对象下的getStats块设置为单一,或检查getStats()是否返回null。