Java 从子线程访问父实例

Java 从子线程访问父实例,java,multithreading,sockets,static,parent,Java,Multithreading,Sockets,Static,Parent,我正在编写一个用Java模拟Kerberos协议的代码。我有一个服务器类和一个客户端类。但有些内容是静态的,而另一些内容不是,再加上套接字,至少我有点搞混了。我认为议定书的细节在这个问题上是武断的 我有一个服务器类,它调用ServerThread类: public class Server{ public void someMethod(){ /* some code */ } public static void main(String args[]){

我正在编写一个用Java模拟Kerberos协议的代码。我有一个服务器类和一个客户端类。但有些内容是静态的,而另一些内容不是,再加上套接字,至少我有点搞混了。我认为议定书的细节在这个问题上是武断的

我有一个服务器类,它调用ServerThread类:

public class Server{

    public void someMethod(){ /* some code */ }

    public static void main(String args[]){ 
        ServerSocket serverSocket = new ServerSocket(port);
        new ServerThread(serverSocket.accept()).start();
    }
}

public class ServerThread extends Thread{
    /* constructor (takes serverSocket from Server) */

    this.parent.someMethod();
    /* That would call someMethod() from the parent class Server instance
     * that instantiated this.
     */
    }

服务器类中实例化ServerThread的部分是给我的,我必须按原样使用它。我自己编写的someMethod()方法,就是我想从ServerThread中使用的方法。有没有一种方法可以这样做呢?调用一行这样的代码。parent.someMethod();?如果可以,是否有一种方法可以从单个控制器类访问这两个类,或者静态内容与非静态内容会破坏这种想法?

当您分配
服务器时(可能只有其中一个),将其写入
服务器中的静态字段。然后您可以从任何地方访问该字段,包括
ServerThread

  class Server extends Thread{

    public void someMethod(){ /* some code */ }

    public static void main(String args[]){ 
      //  ServerSocket serverSocket = new ServerSocket(port);

    }
}

  class ServerThread extends Server{
    /* constructor (takes serverSocket from Server) */
public ServerThread(){
     super.someMethod();

}
服务器中

static Server server; // the one true server in this application
Server.main中

server = new Server();
服务器线程中

Server.server.someMethod();

能否将对
服务器的实例的引用传递给
服务器线程
(通过getter/setter或修改构造函数)?如果是这样,请传递引用,然后可以调用
server.someMethod()
,假设
server
是变量名


如果不是,您的
someMethod()
作为静态方法是否有意义?如果可以安全地将其设置为静态方法,那么在创建要传递给线程的套接字上下文类实例(包含serverSocket等的实例)时,也可以使用服务器实例“this”加载它。然后,您可以从ServerThread轻松调用其上的方法。

何时分配
服务器
实例?对不起,服务器在服务器的主方法中实例化,就在ServerSocket之前。可以移动。这些代码中的任何一个都可以移动。如果需要,main方法可以在单独的类中。