Javaの並行処理とマルチスレッド(1):マルチスレッド
同時並列
1.同時の
2つ以上のイベントを指す同じ時間内に起こります。
2.平行な
二つ以上のイベントを指す時間(一緒に行う)で起こります。
オペレーティングシステムでは、複数のプログラムのインストールは、同時に複数のプログラムは、マクロで実行されている期間を意味する、単一CPUシステムでは、各
時間は唯一のプログラムの実行、微視的すなわちプログラムタイムシェアリングがされて交互に実行するだけで、同時に実行することを印象を与える、時間インターリーブ時間が非常に不足しているためです。
マルチCPUシステムにおいて、これらのプログラムは、同時に複数のプロセッサ(CPU)に割り当てることができます実行することができ、タスクの、多並列実行
プログラムを処理するために、各プロセッサと、すなわちので、同時に実行することができ複数のプログラムを同時に実行することができます。彼は、現在のコンピュータ市場のマルチコア前記
CPUは、マルチコアプロセッサは、より多くのコアは、より多くの並列処理プログラムは、大幅にコンピュータ操作の効率を向上させることができます。
注:コンピュータは、シングルコアプロセッサが並列に複数のタスクを処理することはできませんでなければならない、複数のタスクは、単一のCPU上で同時に実行することができます。同じ
理由で、スレッドは同じです。並行して実行マクロ斜視スレッドから理解されるが、分析の微視的観点から逐次実行することである、すなわち、
スレッドが実行するスレッドであり、システムが唯一のCPUである場合、スレッドで複数のスレッドが特定の順序を実行します我々はこのような状況が呼び出される呼び出し
スレッドのスケジューリング。
第二に、スレッドとプロセス
1.进程
是指一个内存中运行的应用程序(加载到内存中滴),每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创
建、运行到消亡的过程。
2.线程
线程是进程中的一个执行单元,负责当前进程中程序的执行(路),一个进程中至少有一个线程。一个进程
中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程。
线程调度
分时调度
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
抢占式调度
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为
抢占式调度。
设置线程的优先级
抢占式调度详解
大部分操作系统都支持多进程并发运行,现在的操作系统几乎都支持同时运行多个程序。比如:现在我
们上课一边使用编辑器,一边使用录屏软件,同时还开着画图板,dos窗口等软件。
此时,这些程序是在同时运行,”感觉这些软件好像在同一时刻运行着“。
**実際には、複数のスレッド間の高速スイッチングを用いてCPU(中央処理装置)プリエンプティブスケジューリングモード。**コアCPUとのため
の単語、いくつかの点で、あなたは一つだけのスレッドを実行することができ、およびように見えた私たちは、比較的速く感じる複数のスレッド間でCPU速度切り替え、
同時に実行で。実際には、マルチスレッド化されたプログラムは、プログラムの動作速度を改善しませんが、プログラムがそのCPUのこと、運用効率を向上させることができ
、使用が高いです。
第三に、スレッドのクラスを作成します
Javaはjava.lang.Threadのクラスがスレッドを表し使用して、すべてのスレッドオブジェクトは、Threadクラスまたはサブクラスである必要がありますインスタンス。各スレッドの役割はしている
、特定のタスクを完了し、実際に実行順序の期間であるプログラムのコードストリームを実行します。Javaは、このプログラムの流れを表現するために、実行のスレッドを使用しています。
次のようにするJavaのステップと継承Threadクラスを通じて、マルチスレッド作成を開始です。
- サブクラスの定義Threadクラスは、とクラスのrun()メソッドをオーバーライドし、メソッド本体のrun()メソッドは、タスクを完了するために、スレッドのニーズを表して、
run()メソッドが実行スレッドと呼ばれています。 - スレッドのサブクラスのインスタンスを作成し、スレッドオブジェクトが作成されます
- スレッドを開始するスレッドオブジェクトのstart()メソッドを呼び出します
コードは以下の通りであります:
/**
* 自定义一个线程类extends Thread
* @author Mango
*/
public class MainThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(getName() + ":正在执行!"+ i);
}
}
}
/**
* 测试类
* @author Mango
*/
public class Dome1 {
public static void main(String[] args) {
MainThread mainThread = new MainThread();
mainThread.start();
for (int i = 0; i < 10; i++) {
System.out.println("main线程" + i);
}
}
}