問題タブ [static-block]
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 - Couchbase: 静的コード ブロック内からの初期化に時間がかかる
私はソファベースの初期化コードを静的コード ブロック内に配置しました。
私はそれが良い習慣ではないことを知っていますが、このコードをマルチスレッド環境で一度だけ実行し、終了するまで他のスレッドからのすべての後続の呼び出しをブロックする必要があるため、非常に便利で目的を果たしました (ブラックリストが初期化されました)。
驚いたことに、getBlacklist() の呼び出しがタイムアウトになり、完了できませんでした。ただし、2 分後に再度呼び出すと (これが のObservingCache
動作です)、1 秒もかからずに完了しました。
これを解決するために、コードをリファクタリングし、ブラックリストの取得を遅延させました。
への呼び出しisBlacklisted()
は、ブラックリストが初期化されるまで、エントリがブラックリストに登録されているかどうかを確認しようとする他のすべてのスレッドをブロックします。このソリューションは非常に冗長でエラーが発生しやすいため、私はこのソリューションの大ファンではありませんassureBlacklistIsPopulated()
。事前に呼び出さずに BLACKLIST から読み取ろうとする可能性があります。
クラス内の静的 (および最終ではない) フィールドは次のとおりです。
呼び出しが静的初期化ブロックの一部ではないのに、なぜ成功したのかわかりません。私が認識していない静的初期化ブロックの既知のパフォーマンス関連の脆弱性はありますか?
編集:リクエストごとに初期化コードを追加
c++ - 任意の翻訳単位でメインの前に任意のコードを実行するための C++ イディオム
関数を含む1 つの翻訳単位と、main()
メインのない別の TU があります。私が 2 番目のものしか制御できず、1 番目のものには触れられないとします。
ここでは説明しませんが、実行前にいくつかのコードを実行できるようにしたいと考えていますmain()
。関数呼び出しでグローバル変数を初期化することでこれを実行できることは知っていますが、これを非表示にしたい-マクロをできるだけ使用しないでください(あえてマクロを使用しないと言いますか?おそらく不可能です.C++には適切な静的ブロックがありません) )
これを行うためのエレガントな、またはそれほど醜くない方法は何でしょうか? より明確にするために、この機能を一度だけ動作させるだけでなく、複数回使用できるようにするものを探しています。私はそれを次のようにしたい:
PS: この質問は関連していますが、静的クラス メンバーの初期化に関するこの質問と同じではありません。また、C++ では実行できないというこの主張を明確に反証したいという願望にも動機付けられています。
注: はい、私は静的な初期化順序の大失敗について知っています。それを思い出させる必要はありません...そして、それをバイパスする何かを求めているわけではありません。明らかにコードを静的に実行するには、ある程度の慎重さが必要です。
java - Java - シングルトンと静的ブロックベースのクラスの初期化の違いは何ですか?
最近、シングルトンパターンを学びました。そして、1つを実現する必要がありました。例えば:
しかし、以前は次のように認識していました。
したがって、結果は同じです。innerObject は 1 回初期化されますが、コードはよりクリーンになり、マルチスレッドについて心配する必要はありません。パターンが特定の言語に依存していないことは知っていますし、おそらく他の場所ではこのようなことはできないでしょうが、私はこの特定の状況に興味があります. どうもありがとうございました!
java - 静的ブロックが実行されていない、最終変数がない
APIを使用してこのコードをここに持っています:
静的ブロックは、MidnightasOS.setGame(Class); を呼び出して実行されることになっています。しかし、それは起こっていません。
また、System.out を使用してデバッグしましたが、役に立ちませんでした。
問題は MidnightasOS 内にありますか? 必要に応じてコードを投稿します。
Linux と Raspberry PIを使用して人工的なオペレーティング システムを作成しようとしているため、これを行っています。
これは、ゲームボーイのようなゲーム機になります。
すべての Game クラスを読み込もうとしているので、少なくともそのうちの 1 つが使用されますMidnightasOS.setGame(Class);
読んでくれてありがとう。