マルチスレッド
1.糸
1.1 プロセス
プロセスは(メモリ内で)実行されているプログラムです
- システムがリソースの割り当てとスケジューリングを実行するための独立した単位です
- 各プロセスには、独自のストレージ スペースとシステム リソースがあります。
1.2スレッド
スレッドは、プロセス内の単一の制御フローであり、単一の実行パスです。
- シングルスレッド: 1 つのプロセスには 1 つの順次制御フロー (1 つの実行パス) が含まれます。
- マルチスレッド: 単一プロセスでの複数の順次制御フロー (複数の実行パス)
- マルチスレッド化により、プログラムの処理効率を向上させることができます
2.マルチスレッド
2.1 マルチスレッドの概念
マルチスレッドとは、ソフトウェアやハードウェアから複数のスレッドの同時実行を実現する技術です。マルチスレッド機能を備えたコンピュータは、ハードウェア サポートにより同時に複数のスレッドを実行でき、全体的な処理パフォーマンスが向上します。この機能を備えたシステムには、並列マルチプロセッサ、マルチコア プロセッサ、およびチップ レベルのマルチプロセッシングまたは同時マルチスレッド プロセッサが含まれます。プログラムでは、この独立して動作するプログラムの断片を「スレッド」と呼び、それらを使用したプログラミングの概念を「マルチスレッド」と呼びます。
2.2 マルチスレッドの長所と短所
アドバンテージ:
(1) ユーザー インターフェイスは、他の作業を行っている間も CPU をアクティブに保つことができるため、プログラムの実行速度が向上します。
(2) 多くの処理時間を消費する煩わしさは、定期的にプロセッサー時間を他のタスクに割譲することができ、これにより CPU 使用率が向上します。
欠点:
(1) 共有リソースの使用待ちは、プログラムの実行速度を低下させます。これらの共有リソースは、主にプリンターなどの専用リソースです。
(2) スレッド管理には追加の CPU オーバーヘッドが必要であり、スレッドの使用はシステムに追加のコンテキスト負荷をもたらします。
(3) スレッドのデッドロック、つまり、共有リソースをロックして同期を実現するプロセスでデッドロックが発生する場合があります。
2.3 スレッドの作成方法
スレッドクラス Thread は JavaJDK にカプセル化されており、このタイプのオブジェクトを作成するだけでスレッドを作成できます。スレッドは、プログラム内の実行スレッドです。Java 仮想マシンを使用すると、アプリケーションで複数の実行スレッドを同時に実行できます。
スレッドを作成する 2 つの方法
1. この型の記述を Thread のサブクラスとして宣言するクラスを定義し (Thread 型から継承)、Thread の run メソッドを書き換えます。現在のクラスのインスタンスを開始します。
@Override
public void run(){
//在这里书写这个线程需要执行的业务逻辑
for(int i = 0; i <= 10;i++){
System.out.println("输出结果"+i);
}
}
}
このスレッドを開始するには、「エントリ」が必要です。Java プログラムにはエントリ関数が 1 つしかありません — メイン メソッド
public class Main {
public static void main(String[] args) {
//main方法也相当于自定义线程的run方法,且每个主函数都成为主线程。一个项目只有一个主线程
//可以在这里启动自己创建的线程类
//创建定义的MyThread的对象
MyThread mt = new MyThread();
//调用start方法
mt.start();
}
}
結果:
2. Runnable インターフェイスを実装するクラスを定義し、run メソッドをオーバーライドします. Thread クラスのインスタンス化を通じてこのクラスの現在のオブジェクトを渡し、最後に作成された Thread クラスのインスタンスを開始する必要があります.
Runnable インターフェースを実装するクラスを作成し、
/**
* 这个类是runnable接口的实现类,不是线程类
*/
public class MyRunnable implements Runnable{
@Override
public void run(){
//用来书写当前启动的线程中需要执行的逻辑
for (int i = 0; i < 10; i++){
System.out.println("我是runnale实现的线程"+i);
}
}
}
メインクラスにスレッドオブジェクトを作成し、実行可能な実装クラスオブジェクトをスレッドオブジェクトに渡してスレッドオブジェクトを取得します
public class RunnableMain {
public static void main(String[] args) {
//1.需要创建Runnable实现类的对象
MyRunnable mr= new MyRunnable();
//2.创建一个线程对象,并将Runnable对象传递到Thread对象
Thread r = new Thread(mr);
//3.使用线程类的start方法启动线程
r.start();
}
}
結果: