从另一个类获取一个线程

时间:2012-07-07 07:54:31

标签: java multithreading

我有一个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
}
}

2 个答案:

答案 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。