私はVB6から来ており、Javaは初めてです。VB6ではDoEvents
、プロセッサを放棄し、他のスレッドを処理できるようにします。Javaにも同様のことがありますか?どうやって使うの?
2 に答える
プロセッサを放棄し、他のスレッドを処理できるようにします。
Thread#yield()は、プロセッサの制御を自発的に放棄するJavaの対応物です。
java.lang.Thread#yield()のjavadocから:
現在のスレッドがプロセッサの現在の使用を譲ることをいとわないというスケジューラへのヒント。スケジューラーはこのヒントを自由に無視できます。歩留まりは、CPUを過剰に使用するスレッド間の相対的な進行を改善するためのヒューリスティックな試みです。その使用は、詳細なプロファイリングおよびベンチマークと組み合わせて、実際に望ましい効果が得られるようにする必要があります。
この方法を使用することが適切になることはめったにありません。競合状態によるバグの再現に役立つ可能性があるデバッグやテストの目的に役立つ場合があります。また、java.util.concurrent.locksパッケージにあるような並行性制御構造を設計するときにも役立つ場合があります。
注: RIMのUIアプリケーションであるSwingのようなJavaベースのデスクトップUIフレームワークの場合、セマンティクスのタイプを使用してUIを変更する方法があります。invokeLater()
自分でVB6からJavaに移行し、当時とまったく同じ質問に対する答えを探していたので、物事のやり方についての考え方を変えなければならなかったと言えます。「doEvents」の必要性は、VB6を作成したのと同じ方法でJavaプログラムを作成しようとしたか、VB6プロジェクトを「行ごとに」Javaに移植しようとしたことが原因である可能性があります。どちらも良い考えではありません。スイングチュートリアル(これがUIに関するものである場合)と、UIであるかどうかに関係なく、スレッドチュートリアルをよく見てください。細心の注意を払い、イベントディスパッチスレッドがどのように機能するかを理解してください。Javaチュートリアルは素晴らしい出発点であることがわかりました。現在、Oracleにあります。http://docs.oracle.com/javase/tutorial/ サンプルを見て、コードを読んでください。学習するのに適した場所です/実験
VB6をJavaに変換するのではなく、Javaで考え始める必要があります。そこにたどり着くまでには少し時間がかかりましたが、それほど長くはありません。 。幸運を祈ります。Stackoverflowへようこそ。ここは助けを探すのに最適な場所です。