我试图找出当我的对象被取消时关闭与服务的连接的最佳方法。
我有这样的事情:
class something {
public final LongConnection lc;
public something () {
lc = new LongConnection ();
lc.initConnection ();
new Thread (new Runnable () {
public void run () {
ReferenceQueue<LongConnection> rq = new ReferenceQueue<LongConnection> ();
WeakReference<LongConnection> wr = new WeakReference<LongConnection> (lc, rq);
// now it should start listening for the object to be added to the queue
while (true) {
Reference<? extends LongConnection> ref = rq.remove ();
if (rq != null) {
rq.get ().shutdown ();
break;
}
}
// will fall through and die!
}
}).start ()
}
这样我可以实例化这样的东西:
somefunction () {
something = new something ()
}
并且当方法返回(并且被取消范围/gc'd)时,它将正确关闭连接。
问题:(1)这真的很糟糕吗?!?!(2) 它会起作用吗(测试……正在进行中……)?(3)什么是关闭某物的“正确”方式?如果可以避免的话,我不想将关机的问题推广到程序的下一层。