【发布时间】:2012-04-18 21:28:07
【问题描述】:
我用 Java 编写了一个小型 HTTP 服务器,但在将静态变量(服务器配置:端口、根等)传递给处理请求的线程时遇到问题。我不希望我的线程修改这些变量,如果它扩展了服务器类,它也会继承我不想要的方法。
出于性能原因,我不想使用 getter。如果我将静态成员设为最终成员,则在从配置文件加载它们的值时会遇到问题。
这是一个例子
class HTTPServer {
static int port;
static File root;
etc..
....
//must be public
public void launch() throws HTTPServerException {
loadConfig();
while (!pool.isShutdown()) {
....
//using some config here
...
try {
Socket s = ss.accept();
Worker w = new Worker(s);
pool.execute(w);
}catch () {...}
}
}
private void loadConfig(){ //reading from file};
...
other methods that must be public goes here
}
我也不想让工人作为嵌套类。它在另一个包中...
你有什么建议?
【问题讨论】:
-
首先正确编码(即使用 getter 和其他所有内容),稍后您可以担心性能。
-
这些应该是
HTTPServer的常规非静态最终字段,作为构造函数参数传入。此外,不要过早优化——getter 几乎不需要任何成本,除非另有说明。 -
在我看来,你问我们如何把它弄得一团糟。
-
您正在处理一个网络。相比之下,getter 的开销是微不足道的,即使对于经常读取的字段,你提到的字段肯定不是。
标签: java multithreading static final