Java スレッド&&問題

プロセスは PCB のグループに対応し、PCB はオペレーティング システムのカーネル内でレディ キューとブロッキング キューに分割され、二重リンク リストを使用して管理されることがわかっています。

スレッドには 6 つの状態があります

新規: オペレーティング システムのカーネルはスレッドを作成していません。

終了: スレッドは実行を終了し、破棄されました。

実行可能: スレッドは準備完了状態です: 1. CPU 上ですでに実行中、2. 準備完了キュー内

ブロック済み: これはスリープへの呼び出しです。

待機中: wait メソッドが呼び出されます

timed-wait: スレッドがスリープを呼び出します

最初の 3 つの状態はメイン状態であり、後の 3 つの状態はさまざまな理由からブロック状態です。対応するコードは次のとおりです。

public class Demo13 {
    public static void main(String[] args) throws InterruptedException {
        Thread thread=new Thread(()->{
               System.out.println("thread");
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }

        });
        System.out.println(thread.getState());//未创建线程的状态
        thread.start();//启动线程
        Thread.sleep(500);
        System.out.println(thread.getState());
        thread.join();//调用后结束线程
        System.out.println(thread.getState());//线程销毁后的状态
    }
}

複数のスレッドを同時に実行するとコードの実行速度が向上しますが、次の理由によりセキュリティ上の問題も発生します。

1. オペレーティングシステムのランダムスケジューリング/プリエンプティブ実行 [この方法についてはどうすることもできません]

2. 複数のスレッドが同じ変数を変更する

解決策: プログラムの設計を調整して上記の状況を解消します。

3. 一部の変更操作 TM はアトミックではありません

解決策: シャックル操作を通じて、一部の非アトミック操作をアトミック操作にパッケージ化できます。

4. メモリの可視性

5. 命令の並べ替え

問題 4 と 5 はすべて、volatile キーワードによって解決されます。

おすすめ

転載: blog.csdn.net/m0_55634684/article/details/126202005