Java 从子线程访问父实例
我正在编写一个用Java模拟Kerberos协议的代码。我有一个服务器类和一个客户端类。但有些内容是静态的,而另一些内容不是,再加上套接字,至少我有点搞混了。我认为议定书的细节在这个问题上是武断的 我有一个服务器类,它调用ServerThread类: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[]){
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方法可以在单独的类中。