初期のコンピューターにはオペレーティング システムが含まれておらず、最初から最後まで 1 つのプログラムのみが実行され、このプログラムはコンピューターのすべてのリソースにアクセスできました。コンピューターの発展とオペレーティング システムの登場により、コンピューターは複数のプログラムを同時に実行できるようになり、各プログラムは別個のプロセスで実行されます。どうしてそれをするの?主に次の理由に基づいています:
コンピューターはシングルタスクからマルチタスクに進化したため、プログラムも従来のシリアル プログラムから同時実行プログラムに自然に進化することができます。
シリアルプログラムの利点は、シンプルで直感的であることです。しかし、スレッドの出現を促した上記の3つの理由によるものでもあります。上記のコンピューターは、別々のプロセスでプログラムを実行でき、 スレッドにより、同じプロセス内に複数のプログラム制御フローが存在できます。 プログラムの複数のスレッドを複数の CPU で同時に実行するようにスケジュールすることもできます。これは、コンピュータが複数のプログラム(プロセス)を同時に実行し、プログラムが複数のスレッドを同時に実行することに相当します。つまり、プロセス内でスレッドを実行します。
スレッドは軽量プロセスとも呼ばれます。現在のオペレーティング システムは、スレッドを基本単位としてスケジュールされています。リソースはスレッド間で共有されるため、明確な同期メカニズムがないと、スレッド間の実行の乱れ、データのエラーや障害、例外が発生します。多くの場合、これが同時プログラミングの難しさです。
私の観点からすると、いわゆる並行プログラミングとはスレッドの使用です。スレッドは多くの非同期ワークフローをシリアル ワークフローに変換できます。並行プログラミングは、非同期状況での同期を実現してニーズを満たすようにすることです。
では、スレッドのメリットとリスクは何でしょうか?
スレッドは、プログラムの開発とメンテナンスのコストを効果的に削減し、パフォーマンスを向上させることができます。コードの複雑さを軽減し、人間の作業方法をより適切にシミュレートします。
スレッドのサポートは諸刃の剣であり、並行プログラムの開発はプログラマーにとってより高いレベルの要件ももたらします。
セキュリティに関する良い例があります:
value++;
この 1 行のコードだけでは、シングルスレッドのプログラムではまったく問題ありませんが、マルチスレッドのプログラムでは予期せぬ結果が発生する可能性があります。
このコード行を実行するには 3 つのステップがあります: 1. 値を読み取る; 2. 値を 1 加算する; 3. 加算した値を 1 だけ value に代入します。この期間中、プログラムは複数のスレッドによって交互に実行される可能性があり、2 つのスレッドが同時に値を読み取り、同じ値を取得し、それに同時に 1 を加算すると、異なるスレッドが同じ値を取得することになります。 。そして、この値が 2 回追加されることが期待されます。
すべての Java プログラムはスレッドを使用します。プログラム内で明示的にスレッドを作成しない場合でも、使用するフレームワークはスレッドを作成します。これらのスレッドはスレッドセーフである必要があります。
以上がJAVAの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。