問題タブ [autocloseable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ResultSet 呼び出しに対する AutoCloseable Iterator は、ファイナライザーから閉じる必要がありますか?
ResultSet に裏打ちされた Iterator があります。行レベルの後処理に必要です。イテレータは AutoCloseable インターフェースを実装しています。ユーザーによって中断されたすべての行/反復を反復処理するまで、接続は開いたままになります。イテレータのコンシューマが明示的に close() メソッドを呼び出すか、Java7 の try ブロックでイテレータの使用をラップしている場合は、すべて問題ありません。ただし、消費者がそうしない場合、接続がプールに返されることを保証できません。C# の世界では、ファイナライザーを実行し、フォールバック オプションとしてファイナライザーから Dispose(bool) を呼び出します。Javaでも同じことをするべきですか?
java - try-wtth-resources ブロック内で GZIPOutputStream オブジェクトを使用する場合、finish() を呼び出す必要がありますか?
try-with-resources [autoclosable] ブロック内で GZipOutputStream を使用する場合、リソースを使い終わっfinish()
た後に明示的に呼び出す必要がありますか?
java - Java - ScheduledExecutorService: 終了時にタスクを実行
を使用しScheduledExecutorService
て、固定レートでタスクを実行します。これが私のメインメソッドの内容です:
RemoteSync
AutoCloseable
は(and Runnable
) インターフェイスを実装しているため、最初はtry-with-resources
次のように を使用しました。
ただしupdater.startService()
、タスクをスケジュールした直後に戻るため、updater.close()
が途中で呼び出され、アプリケーションが終了します。
のstartService()
方法は次のRemoteSync
とおりです。
理想的には、次のような方法が必要です。
これにより、スケジューラが実際に停止したときに呼び出すことができますclose()
が、残念ながら私はそのような方法を知りません。
私ができることは、次のstartService()
ような方法でメソッドをブロックすることです:
しかし、これは汚くてハックな気がします。
どんな提案でも大歓迎です。
java - autocloseable にロックラッパーを使用するには?
次のwrapeprを書きました:
私のコードでは、次のように使用します。
各メソッドでラッパーを作成したくありません。
単一のラッパーを組み合わせてリソースで試す方法はありますか?
java - Java では、Closeable インターフェースの close() メソッドの冪等性はどのように保証されますか?
Closeable
インターフェースはJava 5で導入されましたが、インターフェースはJava 7でステートメントAutoCloseable
とともに導入されました。(Java 7 以降)インターフェイスを拡張します。try-with-resources
Closeable
Autocloseable
『OCA/OCP Java SE 7 - Programmer I & II Study Guide』の 399 ページには、次のように書かれています。
close()
複数回呼び出すとどうなりますか? 場合によります。を実装するクラスAutoCloseable
の場合、実装はべき等である必要があります。つまりclose()
、一日中電話しても、2 回目以降は何も起こらないということです。[...] を実装するクラスCloseable
の場合、そのような保証はありません。
したがって、このテキストによると、 の実装はAutoCloseable
冪等である必要があり、そうでCloseable
ないものは必要です。AutoCloseable
docs.oracle.com でインターフェースのドキュメントを見ると、次のように書かれています。
close
のメソッドとは異なりCloseable
、この close メソッドはべき等である必要はないことに注意してください。つまり、このclose
メソッドを複数回呼び出すと、目に見える副作用が発生する可能性がありますCloseable.close
。
今、これは本に書かれていることの反対です。2 つの質問があります。
(1) 正しいのは? docs.oracle.com のドキュメントですか、それとも本ですか? べき等性が必要な 2 つのインターフェイスはどれですか?
(2) どちらが冪等である必要があるとしても、Java には冪等であることを保証する方法がまったくないというのは正しいですか? もしそうなら、メソッドが冪等であるという「要件」はclose
プログラマーがすべきことですが、インターフェイスを使用した誰かが実際にそれを行ったかどうかはわかりませんよね? この場合、冪等性は単なるオラクルの提案ですよね?