オブジェクトのスコープが解除されたときに、サービスへの接続を閉じる最善の方法を見つけようとしています。
私はこのようなものを持っています:
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 される) と、接続が適切に閉じられます。
質問: (1) これは本当にひどいですか?!?! (2) うまくいきますか (テストは進行中です..)? (3) 何かをシャットダウンする「正しい」方法は何ですか? 回避できるのであれば、シャットダウンの問題をプログラムの次のレイヤーに昇格させたくありません。