-1

我有一个java类:

public class httpd implements Runnable
{

   public void createHttpdStatistics
   {
      httpdStatistics stats = new httpdStastics(this);
   }

}

现在我将在另一个类中获取在statshttpd 中创建的对象。当 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
}
}
4

2 回答 2

0

通过向 httpd 类中的 stats 对象提供 getter 将 stats 对象传递给 CTOR 中需要的其他类有什么问题 -
当然,这只是在运行代码中未执行 createHttpdStatistics 方法的情况下方法(我建议你 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.

您当然应该确保 getStats 或者 stats 对象下的块设置为单音,或者检查 getStats() 是否返回 null。

于 2012-07-07T08:15:57.233 回答
0

鉴于此处发布的代码:例如,在您的其他类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变量在两个线程之间共享,因此您必须对其进行同步并确保以独占方式对其进行更新。

于 2012-07-07T08:10:54.383 回答