【マルチスレッド】マルチスレッドノートを認識する
4957 ワード
【マルチスレッド】マルチスレッドノートを認識する
この章の目的:
プロセスとスレッドの違いを理解する
Javaスレッドの2つの実装方法と違いを把握する
スレッドの動作状態の理解
3.1プロセスとスレッド
スレッドは実際にはプロセス基盤上のさらなる区分であり,WORDからスペルチェックを1つのスレッドとして扱うことができる.もちろん、複数のスレッドが同時に存在します.
プロセスがなくなった場合、スレッドは必ず消えます.スレッドが消えた場合、プロセスは必ずしも消えるとは限りません.また,プロセスがスレッドに基づいて同時(同時実行)であるスレッドもある.
3.2 Javaのマルチスレッド実装
Javaでマルチスレッドを実装するには、次の2つの方法があります.
3.2.1 Threadクラス
Threadクラスの継承
Threadクラスはjavaです.langパッケージで定義されているクラスは、Threadクラスが継承されている限り、マルチスレッドクラスと呼ばれます.Threadサブクラスではrun()メソッドを明示的に上書きする必要があり,このメソッドはスレッドの主体である.
構文の定義:
クラス名extends Thread{
属性;
方法;
//スレッドの主体であるThreadクラスのrun()メソッドの上書き
public void run(){
スレッド本体;
}
}
例1:
以上のコードは,Aを先に実行してからBを実行するものであり,いわゆる同時実行の効果は得られない.
以上のプログラムは実際には古い形式で呼び出されるため,オブジェクトメソッドを介しているが,スレッドを起動するにはThreadクラスで定義されたstart()メソッドを使用しなければならない.
start()メソッドを呼び出すと、実際に最終的に呼び出されるのがrun()メソッドです.
3.2.2 Runnableインタフェース
Runnableインタフェースの実装
JavaではRunnableインタフェースを実装することによってマルチスレッドを実装することもでき、Runnableインタフェースでは抽象的な方法が1つしか定義されていません.
public void run();
Runnableインタフェースによるマルチスレッド化:
クラス名implements Runnable{
属性;
方法;
public void run(){
スレッド本体;
}
}
例2:
3.3、ThreadクラスとRunnableインタフェース
3.3.1、ThreadクラスとRunnableインタフェースの連絡
定義形式から,ThreadクラスもRunnableインタフェースのサブクラスであることが分かる.
ThreadクラスとRunnableインタフェースの連絡
Threadクラスの定義:
public class Thread extends Object implements Runnable
このアプローチはエージェント・モードによく似ています
3.3.2、ThreadクラスとRunnableインタフェースの違い
Runnableを使用すると、リソース共有の役割を果たすことができます.
3.3.3、ThreadクラスとRunnableインタフェースの使用結論
Runnabelインタフェースを実装することは、Threadクラスを継承することよりも明らかな利点があります.
同じリソースを複数の同じプログラムコードで処理するのに適しています.
単一継承の限界による影響を回避
プログラムの堅牢性が向上し、コードは複数のスレッドで共有でき、コードとデータは独立しています.
3.4、スレッドの状態
マルチスレッドは、オペレーションにおいても一定のオペレーション状態を有します.
作成ステータス:マルチスレッドのオブジェクトが用意されています:Thread t=new Thread()
準備完了ステータス:start()メソッドを呼び出し、cpuのスケジューリングを待つ
運転状態:run()メソッドの実行
≪ブロック・ステータス|Blocking Status|emdw≫:実行を一時停止し、他のスレッドにリソースを渡す可能性があります.
終了ステータス(デッドステータス):スレッドが実行され、使用されなくなりました.
この章の目的:
プロセスとスレッドの違いを理解する
Javaスレッドの2つの実装方法と違いを把握する
スレッドの動作状態の理解
3.1プロセスとスレッド
スレッドは実際にはプロセス基盤上のさらなる区分であり,WORDからスペルチェックを1つのスレッドとして扱うことができる.もちろん、複数のスレッドが同時に存在します.
プロセスがなくなった場合、スレッドは必ず消えます.スレッドが消えた場合、プロセスは必ずしも消えるとは限りません.また,プロセスがスレッドに基づいて同時(同時実行)であるスレッドもある.
3.2 Javaのマルチスレッド実装
Javaでマルチスレッドを実装するには、次の2つの方法があります.
3.2.1 Threadクラス
Threadクラスの継承
Threadクラスはjavaです.langパッケージで定義されているクラスは、Threadクラスが継承されている限り、マルチスレッドクラスと呼ばれます.Threadサブクラスではrun()メソッドを明示的に上書きする必要があり,このメソッドはスレッドの主体である.
構文の定義:
クラス名extends Thread{
属性;
方法;
//スレッドの主体であるThreadクラスのrun()メソッドの上書き
public void run(){
スレッド本体;
}
}
例1:
class MyThread extends Thread{ // Thread ,
private String name; //
public MyThread(String name){
this.name = name;
}
public void run(){ // run() ,
for(int i=0;i<10;i++){
System.out.println(name+" ,i="+i);
}
}
}
public class ThreadDemo01{
public static void main(String args[]){
MyThread mt1 = new MyThread(" A");
MyThread mt2 = new MyThread(" B");
mt1.run();
mt2.run();
}
}
以上のコードは,Aを先に実行してからBを実行するものであり,いわゆる同時実行の効果は得られない.
以上のプログラムは実際には古い形式で呼び出されるため,オブジェクトメソッドを介しているが,スレッドを起動するにはThreadクラスで定義されたstart()メソッドを使用しなければならない.
start()メソッドを呼び出すと、実際に最終的に呼び出されるのがrun()メソッドです.
class MyThread extends Thread{ // Thread ,
private String name; //
public MyThread(String name){
this.name = name;
}
public void run(){ // run() ,
for(int i=0;i<10;i++){
System.out.println(name+" ,i="+i);
}
}
}
public class ThreadDemo01{
public static void main(String args[]){
MyThread mt1 = new MyThread(" A");
MyThread mt2 = new MyThread(" B");
mt1.start();
mt2.start();
}
}
3.2.2 Runnableインタフェース
Runnableインタフェースの実装
JavaではRunnableインタフェースを実装することによってマルチスレッドを実装することもでき、Runnableインタフェースでは抽象的な方法が1つしか定義されていません.
public void run();
Runnableインタフェースによるマルチスレッド化:
クラス名implements Runnable{
属性;
方法;
public void run(){
スレッド本体;
}
}
例2:
class MyThread implements Runnable{
private String name;
public MyThread(String name){
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println(name+" ,i="+i);
}
}
}
public class RunnableDemo01{
public static void main(String args[]){
MyThread mt1 = new MyThread(" A");
MyThread mt2 = new MyThread(" B");
Thread t1 = new Thread(mt1);
Thread t2 = new Thread(mt2);
t1.start();
t2.start();
}
}
3.3、ThreadクラスとRunnableインタフェース
3.3.1、ThreadクラスとRunnableインタフェースの連絡
定義形式から,ThreadクラスもRunnableインタフェースのサブクラスであることが分かる.
ThreadクラスとRunnableインタフェースの連絡
Threadクラスの定義:
public class Thread extends Object implements Runnable
このアプローチはエージェント・モードによく似ています
3.3.2、ThreadクラスとRunnableインタフェースの違い
Runnableを使用すると、リソース共有の役割を果たすことができます.
class MyThread extends Thread{
private int ticket = 5;
public void run(){
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println(" :ticket = "+ticket);
}
}
}
}
public class ThreadDemo04{
public static void main(String args[]){
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();
mt2.start();
mt3.start();
}
}
class MyThread implements Runnable{
private int ticket = 5;
public void run(){
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println(" :ticket = "+ticket);
}
}
}
}
public class RunnableDemo02{
public static void main(String args[]){
MyThread mt1 = new MyThread(); // Runnable
Thread t1 = new Thread(mt1);
Thread t2 = new Thread(mt1);
Thraed t3 = new Thread(mt1);
t1.start();
t2.start();
t3.start();
}
}
3.3.3、ThreadクラスとRunnableインタフェースの使用結論
Runnabelインタフェースを実装することは、Threadクラスを継承することよりも明らかな利点があります.
同じリソースを複数の同じプログラムコードで処理するのに適しています.
単一継承の限界による影響を回避
プログラムの堅牢性が向上し、コードは複数のスレッドで共有でき、コードとデータは独立しています.
3.4、スレッドの状態
マルチスレッドは、オペレーションにおいても一定のオペレーション状態を有します.
作成ステータス:マルチスレッドのオブジェクトが用意されています:Thread t=new Thread()
準備完了ステータス:start()メソッドを呼び出し、cpuのスケジューリングを待つ
運転状態:run()メソッドの実行
≪ブロック・ステータス|Blocking Status|emdw≫:実行を一時停止し、他のスレッドにリソースを渡す可能性があります.
終了ステータス(デッドステータス):スレッドが実行され、使用されなくなりました.