スレッドの簡単な使用
4121 ワード
一、概念の説明
JAvaで重要な概念の一つはスレッドであり、多くの実際の応用でこの技術が使われているので、まずスレッドという概念がどういう意味なのかを見てみましょう.スレッドといえば、まずプロセスについてお話しします.プロセスとは何ですか.プロセスはメモリの中で実行されるプログラムブロックです.例えば、windowsシステムの多くのソフトウェア、例えば多くのQQ、クールな犬などのソフトウェアを使用しています.これらのプログラムはメモリの中で実行されるのはプロセスです.プロセスはシステムがリソースを割り当て、呼び出す基本的な単一ビットです.プロセスには多くの実行プロセスがあります.これらのプロセスはスレッドであり、1つのプロセスには1つ以上のスレッドが含まれています.例えば、クールな犬の音楽で音楽を聴くとき、歌をダウンロードしたいと思っています.このとき、音楽を聴きながら歌をダウンロードすることができます.この2つのタスクは「同時」に実行されているような気がします(コンピュータを知っている友达は、これが同時ではないことを知っています.cpu呼び出しスレッドのアルゴリズムです).この2つのタスクはクールな犬というプロセスの大きなタスクのサブタスクです.これはよく理解されています.大きなタスクはより小さなタスクから構成されています.これがスレッドとプロセスの関係です.
二、スレッドの基本使用
Javaでスレッドを使用するには2つの基本的な方法があります.1つはThreadというクラスを継承することです.1つはRunnableというインタフェースを実現することです.実質的にはこの2つの方法は同じです.ThreadというクラスもRunnableというインタフェースを実現しているからです.(知りたい方はJDkのソースコードを調べることができます.また、ここでは漠然としたデザインモードに関連しています.包装モードです.この部分は他の文章でまとめます.)では、この2つのスレッドを使用する方法を具体的に見てみましょう.
1.Threadというクラスを継承する
具体的なコードを見てみましょう.次のコードは、コンソールで追加の整形数字を出力し続けることを実現しています.
MyThreadというクラスは私たちが定義したクラスです.このクラスはThreadというクラスを継承しています.インポートしたパッケージから見るとThreadというクラスはjava.langというパッケージの下にあります.MyThreadというクラスにはメイン関数のほかにrun関数があります.この関数にはボディの実行コードがあります.間違いなく、スレッドが実行するのはrun関数の内部のコードですが、メイン関数では数の中でこの関数を呼び出す痕跡が見つからないのはなぜですか?run()関数は呼び出されていませんが、start()関数を呼び出す文があります.このとき、start()関数の中でrun()が呼び出されたと推測できます.関数、この推測が正しいかどうかにかかわらず、どうせこのプログラムは正しく実行されたので、もっと具体的でもっと深い原理は後続の文章で皆さんに共有します.皆さん、まずこのようなスレッドを使う方法を覚えておいてください.主関数を見て、主関数の中で私たちが定義したクラスMyThreadを実例化して、それからクラスオブジェクトを通じてstart()を呼び出しました.関数、ここで説明しますが、MyThreadはThreadを継承しています.それ自体がThreadです.名前が違うだけです.これで理解できます.それ自体がThreadなので、Threadクラスの関数start()を呼び出してスレッドを起動します.プログラムはrun関数のコードを実行します.
2.Runnableインタフェースの実装
上記のコードはRunnableというインタフェースを実現しています.同じ点と異なる点を発見することができます.同じところにrun関数があり、異なる点は主関数のコードです.まず同じ点を言えば、継承にしてもインタフェースにしてもrun関数があります.run関数の中にはスレッド実行体があり、起動スレッドはstart()を呼び出します.関数です.主関数にはThreadクラスがインスタンス化され、定義したクラスのオブジェクトをパラメータとして渡しています.ここでのパラメータはRunnableインタフェースを実現したクラスのオブジェクトですが、javaでインタフェースを使用しているクラスは、インタフェースを使用する方法としてこのように書くことができます.もちろん、プログラムは正しく実行され、結果は継承方法と全く同じです.2つの方法にはそれぞれメリットとデメリットがあり、継承を使用すると、他のクラスを継承することはできません.他のクラスを使用する方法はインタフェースしか使用できません.インタフェースを使用すると、他のクラスを継承することもできます.いったい、どのように選択すればいいかは自分の実際のニーズにかかっています.
JAvaで重要な概念の一つはスレッドであり、多くの実際の応用でこの技術が使われているので、まずスレッドという概念がどういう意味なのかを見てみましょう.スレッドといえば、まずプロセスについてお話しします.プロセスとは何ですか.プロセスはメモリの中で実行されるプログラムブロックです.例えば、windowsシステムの多くのソフトウェア、例えば多くのQQ、クールな犬などのソフトウェアを使用しています.これらのプログラムはメモリの中で実行されるのはプロセスです.プロセスはシステムがリソースを割り当て、呼び出す基本的な単一ビットです.プロセスには多くの実行プロセスがあります.これらのプロセスはスレッドであり、1つのプロセスには1つ以上のスレッドが含まれています.例えば、クールな犬の音楽で音楽を聴くとき、歌をダウンロードしたいと思っています.このとき、音楽を聴きながら歌をダウンロードすることができます.この2つのタスクは「同時」に実行されているような気がします(コンピュータを知っている友达は、これが同時ではないことを知っています.cpu呼び出しスレッドのアルゴリズムです).この2つのタスクはクールな犬というプロセスの大きなタスクのサブタスクです.これはよく理解されています.大きなタスクはより小さなタスクから構成されています.これがスレッドとプロセスの関係です.
二、スレッドの基本使用
Javaでスレッドを使用するには2つの基本的な方法があります.1つはThreadというクラスを継承することです.1つはRunnableというインタフェースを実現することです.実質的にはこの2つの方法は同じです.ThreadというクラスもRunnableというインタフェースを実現しているからです.(知りたい方はJDkのソースコードを調べることができます.また、ここでは漠然としたデザインモードに関連しています.包装モードです.この部分は他の文章でまとめます.)では、この2つのスレッドを使用する方法を具体的に見てみましょう.
1.Threadというクラスを継承する
具体的なコードを見てみましょう.次のコードは、コンソールで追加の整形数字を出力し続けることを実現しています.
import java.lang.Thread;
public class MyThread extends Thread{
int i=0;
public void run(){
while(true){
System.out.println(i);
i++;
}
}
public static void main(String[] args) {
MyThread mythread=new MyThread();
mythread.start();
}
}
MyThreadというクラスは私たちが定義したクラスです.このクラスはThreadというクラスを継承しています.インポートしたパッケージから見るとThreadというクラスはjava.langというパッケージの下にあります.MyThreadというクラスにはメイン関数のほかにrun関数があります.この関数にはボディの実行コードがあります.間違いなく、スレッドが実行するのはrun関数の内部のコードですが、メイン関数では数の中でこの関数を呼び出す痕跡が見つからないのはなぜですか?run()関数は呼び出されていませんが、start()関数を呼び出す文があります.このとき、start()関数の中でrun()が呼び出されたと推測できます.関数、この推測が正しいかどうかにかかわらず、どうせこのプログラムは正しく実行されたので、もっと具体的でもっと深い原理は後続の文章で皆さんに共有します.皆さん、まずこのようなスレッドを使う方法を覚えておいてください.主関数を見て、主関数の中で私たちが定義したクラスMyThreadを実例化して、それからクラスオブジェクトを通じてstart()を呼び出しました.関数、ここで説明しますが、MyThreadはThreadを継承しています.それ自体がThreadです.名前が違うだけです.これで理解できます.それ自体がThreadなので、Threadクラスの関数start()を呼び出してスレッドを起動します.プログラムはrun関数のコードを実行します.
2.Runnableインタフェースの実装
import java.lang.Thread;
public class MyThread implements Runnable{
int i=0;
public void run(){
while(true){
System.out.println(i);
i++;
}
}
public static void main(String[] args) {
Thread t=new Thread(new MyThread());
t.start();
}
}
上記のコードはRunnableというインタフェースを実現しています.同じ点と異なる点を発見することができます.同じところにrun関数があり、異なる点は主関数のコードです.まず同じ点を言えば、継承にしてもインタフェースにしてもrun関数があります.run関数の中にはスレッド実行体があり、起動スレッドはstart()を呼び出します.関数です.主関数にはThreadクラスがインスタンス化され、定義したクラスのオブジェクトをパラメータとして渡しています.ここでのパラメータはRunnableインタフェースを実現したクラスのオブジェクトですが、javaでインタフェースを使用しているクラスは、インタフェースを使用する方法としてこのように書くことができます.もちろん、プログラムは正しく実行され、結果は継承方法と全く同じです.2つの方法にはそれぞれメリットとデメリットがあり、継承を使用すると、他のクラスを継承することはできません.他のクラスを使用する方法はインタフェースしか使用できません.インタフェースを使用すると、他のクラスを継承することもできます.いったい、どのように選択すればいいかは自分の実際のニーズにかかっています.