問題タブ [non-thread-safe]
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 - スレッドセーフでないメソッドから静的 Java 定数を初期化する
のようなクラス定義があるとしましょう
メソッドはフィールドをcreateValue()
参照せず、それ以外の場合はクラスのコンストラクターでのみ呼び出され、スレッドセーフではありません。DEFAULT_VALUE
Bootstrapper
上記のコードに (プログラミング スタイル以外に) 何か問題はありますか? クラスの初期化のルールを考えると、おそらくスレッドセーフは問題ではありませんが、プログラマーが知っておくべき重要なことはありますか?
java - スレッドに Jframe を実行させる
私は経験豊富なプログラマーですが、最近まで Java を使用したことがありませんでした。インターネットからコードをコピーすることで機能するクラス(huzzah)があり、main()関数を使用するときに以下のコードを独自のスレッドとして実行すると、Jframeは独自のスレッドで実行されます。
しかし、私には問題があります。この Jframe を別のスレッドのインタラクティブな部分として (implements Runnable クラスのプライベート メンバーとして) 使用したいと考えています。そして、インタラクティブにしたい。Jframe メソッド actionPerformed は親スレッド オブジェクトの関数を呼び出す必要があり (コマンドを入力すると、何かを実行します)、親は .append() メソッドを呼び出して結果を Jframe に報告する必要があります。Jframe 内に親への参照を含めることができるので、そのメソッドを呼び出すことができます。
したがって、私の問題は、スレッド同期のためにこれを適切に設計することです。私のスレッドはスレッドセーフではない Jframe を適切に使用できるため、スレッド同期とイベントハンドラーがどのように相互作用するのかわかりません。
Jframeを適切に初期化する場所と方法は? (具体的には、何らかの方法で EventQueue を使用することになっているのでしょうか?) それとも、目立ったものを見逃していて、これを完全に間違った方法で行っているのでしょうか?
java - 同時アクセスによる TreeMap でのこの null ポインタ例外はありますか?
TreeMapがスレッドセーフでないことはわかっています。TreeMap とConcurrentSkipListMapを比較しようとしています。私が使用しているコードを以下に示します。私が取得しているエラーが、TreeMap がスレッドセーフではないためであり、他の理由によるものではないことを確認したいと思います。
スレッド "pool-1-thread-52" での例外 java.lang.NullPointerException at java.util.TreeMap.rotateLeft(TreeMap.java:2060) at java.util.TreeMap.fixAfterInsertion(TreeMap.java:2127) java. util.TreeMap.put(TreeMap.java:574) で ThreadTestTreeMap$1.run(ThreadTestTreeMap.java:39) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で java.util.concurrent.ThreadPoolExecutor$ でWorker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
testing - TestNG で Selenium Webdriver テストを並行して実行すると、正しいデータがブラウザーに送信されない
それぞれに 1 つのテスト メソッドを持つ 2 つの TestNG クラスがあります。各テスト クラスには、独自の @Dataprovider があります。各テストは、Selenium Webdriver を使用して Web アプリケーションで機能を実行します。ドライバは、ファクトリ メソッドとスレッドローカルを介して TestNG クラスごとに作成されるため、ドライバはスレッドセーフである必要があります。ただし、testng.xml を使用してテストを並行して実行すると、両方のテストで同じデータが使用され、一方が失敗します。これがコードです。Excel ユーティリティ クラスのスレッド セーフに問題があるのではないかと考えています。
java - 変数の非同期読み取り/書き込みはデータ競合を引き起こす可能性がありますか?
Jack Shirazi によるJava Performance Tuningでは、次のように書いています。
これは、変数のアクセスと更新が自動的に同期されることを意味します (変数が long または double でない限り)。メソッドが変数へのアクセスまたは代入だけで構成されている場合、スレッド セーフのために同期化する必要はなく、パフォーマンスのためにそうしない理由もあります。スレッド セーフは、他の変数値とは関係なく、変数にアクセスしたり、変数に代入したりするステートメントのセットにさらに拡張されます。
上記の説明によると、操作 likeflag = true
は常にアトミックであり、 は必要ありませんsynchronize
。
ただし、次の状況をデータ競合と見なす別の記事があります。
そして著者は次のように述べています。
現在、フラグは揮発性ではないため、すべての実行にデータ競合があります
2 つの記事の矛盾について、私はかなり混乱しました。