如何从线程访问服务器对象
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 连接不能被多个线程同时使用。
你好。
我正在编写一个小的多线程客户端-服务器 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 连接不能被多个线程同时使用。
你好。