如何从线程访问服务器对象

How to access server objects from Threads

我正在编写一个小的多线程客户端-服务器 Java 应用程序。服务器启动时,它会创建一些对象,例如用于数据库连接的对象,另一个用于管理用户等。我需要从我启动的每个线程访问它们。哪个是正确的方法? 像这样将对象 istance 传递给每个线程:

public class Server{
      private ObjectType1 object1;
      private ObjectType2 object2;
      public void run{
            .......
            new ServerThread(object1,object2);
            .......
      }
}

或将服务器连接传递给每个线程:

public class Server{
      private TypeObject1 object1;
      private TypeObject2 object2;

      public TypeObject1 getObject1(){....}
      public TypeObject2 getObject2(){...}

      public void run(){
          .....
          new ServerThread(this);
          .....
      }
  }

然后从Thread中这样访问对象?

server.getObject1();

您可以创建一个特殊的 class 来存储对象引用,例如 ObjectHolder,您可以在其中放置 object1 和 object2。

每个线程都可以使用静态方法访问此class以获取对象。

最正确的做法是将单个引用传递给每个对象,以遵守所谓的得墨忒耳法则:一个抽象应该直接依赖于其他抽象,而不是其他抽象的成员。

但是如果你发现需要传递的对象太多,一个合理(也更舒服)的方法是通过一个新的抽象来封装它们,我们称之为设置:那应该是一个单一的 javabean,具有所需数量的成员,但根本没有任何行为。

顺便说一句:请记住,一个 JDBC 连接不能被多个线程同时使用。

你好。