問題タブ [atomicboolean]

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.

0 投票する
11 に答える
116840 参照

java - 揮発性ブール値とAtomicBoolean

揮発性ブール値では達成できないAtomicBooleanは何をしますか?

0 投票する
2 に答える
11070 参照

java - AtomicBoolean と同期ブロック

一部のsynchronizedブロックをAtomicBoolean.

の例を次に示しsynchronizedます。

そして代替AtomicBoolean

の CAS プロパティを利用AtomicBooleanすると、同期に依存するよりもはるかに高速になるはずなので、ちょっとしたマイクロ ベンチマークを実行しました。

10 個の同時スレッドと 1000000 回の反復の場合、ブロックAtomicBooleanよりわずかに高速になります。synchronized

AtomicBoolean を使用した toggleCondition() に費やされた平均時間 (スレッドあたり): 0.0338

同期された状態で toggleCondition() に費やされた平均時間 (スレッドごと): 0.0357

マイクロベンチマークが価値があることは知っていますが、その差はもっと大きくなるべきではありませんか?

0 投票する
0 に答える
217 参照

android - アプリケーションで画面の向きの変更が状態をリセットしないようにする方法

スレッドが開始したら、anAtomicBooleanを true に設定します。最後に、関連する Handler で false にリセットします。

スレッドの終了前に画面の向きを変更すると:

  • onSaveInstanceState() は、このブール値が TRUE であることを出力します
  • onPause() も TRUE を出力します。-> 論理的

スレッドが終了し、方向を再度変更します。

  • My Log.e "Bool" は FALSE を出力します -> OK
  • onSaveInstanceState() は TRUE を出力します -> 問題
  • onPause() は TRUE を出力します -> 問題
  • onCreate() は TRUE を出力します -> 問題

OnCreate():

ハンドラ:

OnSaveInstanceState:

OnStop メソッドでは、ブール値を false に設定し、OnPause メソッドでは、progressDialog が存在する場合は破棄します。終了前に画面を回さなければ、bool は FALSE にリセットされ、問題はありません。ブール値を正しくリセットするにはどうすればよいですか? ありがとう

0 投票する
1 に答える
84 参照

android - atomisboolean のマルチスレッドの問題

Androidデバイスを使用してロボットを駆動するコードを「開発」しようとしているときに、愚かな問題に取り残され、何週間も解決しようとした後、ついにあなたに助けを求めます. 私はAndroidもJavaもまったく初めてです。私は基本的に bluetoothchat の例を使用して、4 つの矢印でリモートを描画するメイン レイアウトを変更するだけです。これらの矢印を使用するために、指定された imageButton が押されている限り、300ms ごとにバイトを送信する関数を実装しました。次のコードを参照してください。混乱していてもあまり怒らないでください (私は初心者です)。

クラスの冒頭で、atomicBoolean a は次のように設定されます。 private AtomicBoolean a = new AtomicBoolean(true);

私の問題は次のとおりです。ボタンを押したままにすると、logcat に「StringBuffer=0」が表示され、次に「a set to false」「S sent」「t.stop and return」が表示され、しばらくの間何も表示されません (約 12秒)、その後、指を離しても終了せずに「メッセージが送信されました」「dodo」でループし始めます。指を長く離さないと (単純なクリック)、次のようになります: "stringBuffer=0" "S sent" "a set to false" "t.stop and return" "actionUp" "a set to true" " message sent" "dodo" "StringBuffer=0" "S sent" "t.stop and return"

私は本当に迷っており、この機能で何が起こっているのか理解できません。

それが役立つ場合は、samsung galaxy tab (GT-P1000) ファームウェア バージョン 2.2.1 でデバッグしています。

誰かがデバッグを手伝ってくれて、私の問題を説明してくれることを願っています...

0 投票する
1 に答える
5562 参照

java - JavaでAtomicBooleanをブール値と比較する方法

次のコードを使用して、Java のマルチスレッド アプリケーションに TTAS をデプロイしようとしています。

しかし、状態の値を比較して、それが真か偽かを確認するにはどうすればよいですか? 2 つの異なる変数の型を比較しようとしているというエラーが発生するたびに、その値をスピンしようとすると? 式:

ありがとう!

0 投票する
4 に答える
1987 参照

java - 同期された揮発性ブール値はatomicBooleanと同じですか?

変数に対して読み取り操作のみを行っている場合は、揮発性を使用する必要があります。これは、前のスレッドが CPU を失い、同期ブロックを終了した場合でも、1 つのスレッドによって更新された値が他のスレッドに表示されるためです。あれは正しいですか?アトミックプリミティブは、アトミック動作を使用する必要がある場合に使用されます。例えば ​​-

volatileBoolean の値が true であるとしましょう。1 つのスレッドは volatileBoolean を true としてチェックし、if ブロックに入り、2 番目のスレッドは volatileBoolean の値を true と見なし、if ブロックにも入ります。ここで、最初のスレッドが偽の値 (!volatileBoolean) を volatileBoolean 変数に割り当て、CPU を失い、if ブロックを終了するとします。2 番目のスレッドは volatileBoolean を false と見なし、true に割り当てます。

これは、AtomicBoolean を使用する必要がある場合ですか? はいの場合、同期を使用してこれを処理できないのはなぜですか?

0 投票する
4 に答える
2729 参照

java - AtomicBoolean ロックはどこにありますか?

AtomicBoolean は同期にネイティブ コードを使用します。Javaロックにどのように変換されますか?

違いは何ですか:

対:

a 自体が操作がアトミックであることを保証するため、synchronized(a) は必要ありません。しかし、synchronized (a) のロックは a.set(true) と同じロックですか?

0 投票する
1 に答える
113 参照

android - 結果を待たなければならないメソッドのスレッド、アトミック ブール値、同期された設計に関する考慮事項

コードのデバッグが少し難しくなり始めているため、設計の選択が理想的ではないと思い込んでいます。私は初心者の Android プログラミングであり、最適な操作のために設計を合理化するための助けが欲しい.

はじめに

rfcomm インターフェイスを使用してクライアント デバイスとサーバー デバイスの間でデータを転送するアプリケーションを作成しています。クライアントは、特定のキーを使用してサーバーから特定のものを要求する必要があり、サーバーが結果を返すまで待機する必要があります。

現在の設計

  • ボタンを押すと、サーバーからの情報の要求がトリガーされます。
  • リクエストを実行する新しいスレッドが開始されます。
  • 一意の整数であるキーがバイト配列に変換され、サーバーに送信されます。
  • スレッドには、サーバーからの応答を示す特定のブール値が false から true に切り替わるのを待機している while ループがあります。
  • サーバー側で情報を受け取ります。サーバーはキーを使用して、次に何をすべきかを識別します。
  • サーバーはスレッドを開始してクエリを実行し、結果として jsonString を取得します。
  • サーバーは、バイト配列に変換された jsonstring を、先頭に同じ識別キーを付けてクライアントに送り返します。
  • クライアントはメッセージを読み取り、識別キーに基づいてバイト配列を処理メソッドに送信します。
  • 処理メソッドは jsonString をクラス変数に格納し、ブール値を反転して、待機していた値が設定されたことを他のスレッドに知らせます。
  • Json 文字列はクライアント側でオブジェクトに変換されます。そのオブジェクトで何かが行われます。

このコードは現在、情報をサーバーに正しく送信し、サーバーは正しく検索を行い、有効な json 文字列の結果を取得します。ただし、サーバーがその結果をクライアントに書き込むときに問題が発生します。1 件ではなく 20 件のメッセージが表示され、検索キーに一致するメッセージはありません...

私の質問

  • デザインに関して効率的な方法で物事を行っていますか?
  • synchronizedコードをよりスレッド セーフにするために、キーワード or and and Atomic Boolean を使用するメリットはありますか? どうすれば実装できますか?
  • 文字列をバイト配列に変換するための最大長はありますか? コードが送信を分割しようとしているのかもしれません。そのため、20 の異なる結果が得られます。

関連コード

.

.

0 投票する
4 に答える
17463 参照

java - AtomicBoolean の getAndSet と compareAndSet の違い

スレッドのタイトルは自明である必要があります...AtomicBooleanクラスからの以下のメソッドの仕様の間で少し混乱しています:

  • java.util.concurrent.atomic.AtomicBoolean#compareAndSet
  • java.util.concurrent.atomic.AtomicBoolean#getAndSet

if私の推測では、条件でブール句として使用すると、どちらも同じ動作になります。

現在のフラグ値を取得して自動的に更新したい場合、両方のメソッドで同じ動作が発生するのではないでしょうか?

内部の違いがない場合は、それぞれをいつどのように使用するかについての説明をいただければ幸いです。