無限の操作にJavaフューチャーを使用するのは間違っていますか?

ジェイコブ:

Clojureプログラムで無限演算を実装する必要があります。Javaプログラマーにとっても、構文がかなり明確であることを願っています。

(defn- my-operation
    (future
        (while @continue
            (do things)
            (Thread/sleep polling-time)))

それは私が欲しいもの、別のスレッドでの操作、つまりメインのスレッドをブロックしないこと、そしてドット特殊形式を使用するように強制するネイティブJava関数を処理する必要のないかなり明確で単純な構文を私に与えます。

しかし、Javaの将来の定義は「非同期計算の結果の表現」であり、この場合、私はその結果に対して実際には何もしていません。

  • このように使用するのは間違っていますか?
  • 自分のスレッドを開始する場合と比較して、気になる技術的な違いはありますか?
  • これは意味的に間違っていますか?
l0st3d:

これは、Clojureが管理するスレッドプール内のスレッドを拘束し、そのようなものに使用します。そのスレッドプールの使用目的は、短時間実行される操作のためのものであり、一種の誤用です。また、の背後にある意図futureは、値を1回計算して複数回逆参照できるようにすることです。これも一種の誤用です。

Javaのエグゼキューターフレームワークの使用、コア非同期、独自のスレッドの開始など、長時間実行するタスクには他にも多くのオプションがあります。

(defonce background-thread (doto (Thread. (fn []
                                            (while @continue
                                              (do things)
                                              (Thread/sleep polling-time))))
                             (.setDaemon true)
                             (.start)))

他の人が述べたように、未処理の例外について考えることは価値があるかもしれません。Stuart Sierraのブログ投稿は、始めるのに最適な場所です。

のdocstring futureは、呼び出すことができるものを返すことを示していますderefそれは同じように、delayまたはそれatom同じように参照型であり、それがどのように値を取得するかについての独自のセマンティクスを持ち、trueである場合、futureを作成してそれを永久に実行することができます。あなたがそれが生み出す価値を気にすること。

(clojure.repl/doc future)
-------------------------
clojure.core/future
([& body])
Macro
  Takes a body of expressions and yields a future object that will
  invoke the body in another thread, and will cache the result and
  return it on all subsequent calls to deref/@. If the computation has
  not yet finished, calls to deref/@ will block, unless the variant of
  deref with timeout is used. See also - realized?.

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

スキャナーに別の方法を使用するのは間違っていますか?

分類Dev

サーバーまたはポートの詳細が間違っていると、kafkaコンシューマーは無限に待機します

分類Dev

useEffectフックを使用せずにAPIをフェッチするのは間違っていますか?

分類Dev

無限ループでのこの試みで私は何を間違っていますか?

分類Dev

MITレクチャーは間違っていますか?ハッシュにおけるオープンアドレス法の分析

分類Dev

パニック/スロー/キャッチとして回復するのは間違っていますか

分類Dev

私のリーフ証明書は本当に無効ですか、それとも `openssl verify`を間違って使用していますか?

分類Dev

このチュートリアルは間違っていますか?

分類Dev

Tensorflow.jsを使用して予測を継続するために、Vue.jsインスタンス内に無限ループを設定するのは間違っていますか?

分類Dev

ジュリア:フロートの合計は間違っていますか?

分類Dev

オーチャードコマンドラインは、モジュールが有効になっているのに無効になっていると言っています-UIから無効にすることはできません

分類Dev

ビューの列に間違った値が表示されています。私は何が間違っているのですか?

分類Dev

この場合、オーバーロードを使用するのは間違っていますか?

分類Dev

ネットワークを変更するたびに、DNSキャッシュのIPが間違っています。毎回自動的に修正する方法は?

分類Dev

ページの下部にフッターを配置するにはどうすればよいですか?また、何が間違っていますか?

分類Dev

クロージャを使用して関数をオブジェクトにバインドするのはなぜ間違っているのですか?

分類Dev

このcolidityチャレンジ(Zinc 2018)のテストケースは間違っていますか?

分類Dev

この場合、clangが間違っているか、gccが間違っているか、またはその両方が間違っていますか?メンバーポインタでconstnessをキャストします

分類Dev

無限ループを使用して符号なし整数を追加すると、間違った結果が得られるのはなぜですか?

分類Dev

なぜ私は無限ループを持っているのですか、そしてそれをどのように違う方法で行うのですか?

分類Dev

各 Java フューチャーは、その生涯にわたってコアを制御します

分類Dev

Graphqlがnullを返さないフィールドQuery.getDateに対してnullを返すことはできません。私はgraphqlを初めて使用するので、私のアプローチが間違っているのか、それともコードが間違っているのかを知りたいのですが。

分類Dev

gpg-agent に残っているパスフレーズのキャッシュ期間を取得するにはどうすればよいですか?

分類Dev

webGLでNURBSサーフェス(動詞)を使用すると、controlPointsの代わりにコーナーを使用しない限り、インデックスは常に間違っています

分類Dev

正規のワークロードにかかった合計時間をベンチマークとして使用するか、個々の操作にかかったサイクル/時間をカウントすることが望ましいですか?

分類Dev

入力が間違っていると、プログラムは無限ループに入ります

分類Dev

グローバルな状態を管理するためにReactフックをエクスポートするのは間違っていますか?

分類Dev

マイクロサービスでセッションを使用するのは間違っていますか?

分類Dev

ページ上の要素が無効になっている間、Selenium Java ChromeはEnterキーを送信します

Related 関連記事

  1. 1

    スキャナーに別の方法を使用するのは間違っていますか?

  2. 2

    サーバーまたはポートの詳細が間違っていると、kafkaコンシューマーは無限に待機します

  3. 3

    useEffectフックを使用せずにAPIをフェッチするのは間違っていますか?

  4. 4

    無限ループでのこの試みで私は何を間違っていますか?

  5. 5

    MITレクチャーは間違っていますか?ハッシュにおけるオープンアドレス法の分析

  6. 6

    パニック/スロー/キャッチとして回復するのは間違っていますか

  7. 7

    私のリーフ証明書は本当に無効ですか、それとも `openssl verify`を間違って使用していますか?

  8. 8

    このチュートリアルは間違っていますか?

  9. 9

    Tensorflow.jsを使用して予測を継続するために、Vue.jsインスタンス内に無限ループを設定するのは間違っていますか?

  10. 10

    ジュリア:フロートの合計は間違っていますか?

  11. 11

    オーチャードコマンドラインは、モジュールが有効になっているのに無効になっていると言っています-UIから無効にすることはできません

  12. 12

    ビューの列に間違った値が表示されています。私は何が間違っているのですか?

  13. 13

    この場合、オーバーロードを使用するのは間違っていますか?

  14. 14

    ネットワークを変更するたびに、DNSキャッシュのIPが間違っています。毎回自動的に修正する方法は?

  15. 15

    ページの下部にフッターを配置するにはどうすればよいですか?また、何が間違っていますか?

  16. 16

    クロージャを使用して関数をオブジェクトにバインドするのはなぜ間違っているのですか?

  17. 17

    このcolidityチャレンジ(Zinc 2018)のテストケースは間違っていますか?

  18. 18

    この場合、clangが間違っているか、gccが間違っているか、またはその両方が間違っていますか?メンバーポインタでconstnessをキャストします

  19. 19

    無限ループを使用して符号なし整数を追加すると、間違った結果が得られるのはなぜですか?

  20. 20

    なぜ私は無限ループを持っているのですか、そしてそれをどのように違う方法で行うのですか?

  21. 21

    各 Java フューチャーは、その生涯にわたってコアを制御します

  22. 22

    Graphqlがnullを返さないフィールドQuery.getDateに対してnullを返すことはできません。私はgraphqlを初めて使用するので、私のアプローチが間違っているのか、それともコードが間違っているのかを知りたいのですが。

  23. 23

    gpg-agent に残っているパスフレーズのキャッシュ期間を取得するにはどうすればよいですか?

  24. 24

    webGLでNURBSサーフェス(動詞)を使用すると、controlPointsの代わりにコーナーを使用しない限り、インデックスは常に間違っています

  25. 25

    正規のワークロードにかかった合計時間をベンチマークとして使用するか、個々の操作にかかったサイクル/時間をカウントすることが望ましいですか?

  26. 26

    入力が間違っていると、プログラムは無限ループに入ります

  27. 27

    グローバルな状態を管理するためにReactフックをエクスポートするのは間違っていますか?

  28. 28

    マイクロサービスでセッションを使用するのは間違っていますか?

  29. 29

    ページ上の要素が無効になっている間、Selenium Java ChromeはEnterキーを送信します

ホットタグ

アーカイブ