ダークホースプログラマー-マルチスレッド(概要)
3189 ワード
--------androidトレーニング、javaトレーニング、java学習型技術ブログ、お客様との交流を楽しみにしています!---------
≪プロセス|Process|emdw≫:実行中のプログラム.
各プロセスの実行には、実行パスまたは制御ユニットと呼ばれる実行順序があります.
スレッド:プロセス内の独立した制御ユニットです.
スレッドはプロセスの実行を制御しています.
1つのプロセスに少なくとも1つのスレッドがあります.
Java VMが起動するとjava.exeというプロセスがあります.
このプロセスの少なくとも1つのスレッドはjavaプログラムの実行を担当します.
また,このスレッドが実行するコードはmainメソッドに存在する.
このスレッドをメインスレッドと呼びます.
拡張:仮想マシンjvm、jvmが1つ以上のスレッドを起動し、ゴミ回収メカニズムを担当するスレッドも詳細に説明されています.
1、カスタムコードでスレッドをカスタマイズする方法
apiの検索によりjavaはスレッドのようなものの説明を提供している.Threadクラスです.
スレッドを作成する最初の方法:Threadクラスを継承します.
手順:
1、定義クラス継承Thread.
2、Threadクラスのrunメソッドを複写する.
目的:runメソッドにカスタムコードを格納し、スレッドを実行します.
3、スレッドを呼び出すstartメソッド.このメソッドには、スレッドを起動し、runメソッドを呼び出す2つの役割があります.
結果:「main+++i」と「run+++++i」が交互に実行される.
実行結果は毎回異なることがわかりました.
複数のスレッドがcpuの実行権を取得するためです.cpuが誰に実行されるかは、誰が実行します.
ある時点で、1つのプログラムしか実行できません.(多核を除く)
cpuは、同時に動作しているように見える効果を達成するために、この高速切り替えをしています.
マルチスレッドの動作を互いにcpuの実行権を奪っているようにイメージすることができます.
これがマルチスレッドの特性です.ランダム性です.
なぜrunメソッドを上書きするのですか?
Threadクラスはスレッドを記述するために使用されます.
このクラスは、スレッドが実行したいコードを格納する機能を定義します.このストレージ機能がrunメソッドです.
つまり、Threadクラスのrunメソッドは、スレッドが実行するコードを格納するために使用されます.(メインスレッドのデフォルトの実行スペースはmainメソッドです)
スレッド内のメソッド:
getName():スレッドのデフォルト名
static Thread currentThread(): スレッドオブジェクト名の取得//汎用
スレッド名の設定:setNameまたはコンストラクション関数の設定.
練習:チケット販売プログラム
IllegalThreadStateException無効スレッド状態異常.
スレッドを作成する第2の方法:Runableインタフェースを実装します.
手順:
1.定義クラス実装Runnableインタフェース.
2.Runnableインタフェースのrunメソッドを上書きします.
スレッドが実行するコードをrunメソッドに格納します.
3.Threadクラスでスレッドオブジェクトを作成する.
4.Runnableインタフェースのサブクラスオブジェクトを実際のパラメータとしてThreadクラスのコンストラクタに渡す.
スレッドにオブジェクトを指定させるrunメソッド.runメソッドのサブクラスオブジェクトを明確にする必要があります.
5.Threadクラスを呼び出すstartメソッドスレッドを開き、Runableインタフェースサブクラスを呼び出すrunメソッド.
関連知識ポイント:
実現方式と継承方式の違いは何ですか?
実装のメリット:単一継承の限界を回避します.
スレッドを定義する場合は、実装方法を推奨します.
Runnableインタフェースの役割は,スレッドの実行内容を確立することである.
2つの方法の違い:
継承Thread:スレッドコードはThreadサブクラスrunメソッドに格納されます.
Runnableを実装し,スレッドコードはインタフェースのサブクラスのrunメソッドに存在する.
--------androidトレーニング、javaトレーニング、java学習型技術ブログ、お客様との交流を楽しみにしています!---------
≪プロセス|Process|emdw≫:実行中のプログラム.
各プロセスの実行には、実行パスまたは制御ユニットと呼ばれる実行順序があります.
スレッド:プロセス内の独立した制御ユニットです.
スレッドはプロセスの実行を制御しています.
1つのプロセスに少なくとも1つのスレッドがあります.
Java VMが起動するとjava.exeというプロセスがあります.
このプロセスの少なくとも1つのスレッドはjavaプログラムの実行を担当します.
また,このスレッドが実行するコードはmainメソッドに存在する.
このスレッドをメインスレッドと呼びます.
拡張:仮想マシンjvm、jvmが1つ以上のスレッドを起動し、ゴミ回収メカニズムを担当するスレッドも詳細に説明されています.
1、カスタムコードでスレッドをカスタマイズする方法
apiの検索によりjavaはスレッドのようなものの説明を提供している.Threadクラスです.
スレッドを作成する最初の方法:Threadクラスを継承します.
手順:
1、定義クラス継承Thread.
2、Threadクラスのrunメソッドを複写する.
目的:runメソッドにカスタムコードを格納し、スレッドを実行します.
3、スレッドを呼び出すstartメソッド.このメソッドには、スレッドを起動し、runメソッドを呼び出す2つの役割があります.
class Demo extends Thread
{
public void run()
{
for(int i = 0 ; i<60 ; i++)
{
System.out.println("run+++++"+i);
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
Demo de = new Demo();// 。
de.start();// run 。
//de.run();// 。 。
for(int i = 0 ; i<60; i ++)
{
System.out.println("main++++"+i);
}
}
}
結果:「main+++i」と「run+++++i」が交互に実行される.
実行結果は毎回異なることがわかりました.
複数のスレッドがcpuの実行権を取得するためです.cpuが誰に実行されるかは、誰が実行します.
ある時点で、1つのプログラムしか実行できません.(多核を除く)
cpuは、同時に動作しているように見える効果を達成するために、この高速切り替えをしています.
マルチスレッドの動作を互いにcpuの実行権を奪っているようにイメージすることができます.
これがマルチスレッドの特性です.ランダム性です.
なぜrunメソッドを上書きするのですか?
Threadクラスはスレッドを記述するために使用されます.
このクラスは、スレッドが実行したいコードを格納する機能を定義します.このストレージ機能がrunメソッドです.
つまり、Threadクラスのrunメソッドは、スレッドが実行するコードを格納するために使用されます.(メインスレッドのデフォルトの実行スペースはmainメソッドです)
スレッド内のメソッド:
getName():スレッドのデフォルト名
static Thread currentThread(): スレッドオブジェクト名の取得//汎用
スレッド名の設定:setNameまたはコンストラクション関数の設定.
練習:チケット販売プログラム
/*
* :
*/
class Ticket extends Thread
{
public static int tick = 1;
boolean flog = true;
public void run()
{
while(flog)
{
if(tick<=100)
{
System.out.println(Thread.currentThread().getName()+"sale :"+ tick++);
}
else
{
System.out.println("sale over");
flog = false;
}
}
}
}
public class TicketDemo {
public static void main(String[] args)
{
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
IllegalThreadStateException無効スレッド状態異常.
スレッドを作成する第2の方法:Runableインタフェースを実装します.
手順:
1.定義クラス実装Runnableインタフェース.
2.Runnableインタフェースのrunメソッドを上書きします.
スレッドが実行するコードをrunメソッドに格納します.
3.Threadクラスでスレッドオブジェクトを作成する.
4.Runnableインタフェースのサブクラスオブジェクトを実際のパラメータとしてThreadクラスのコンストラクタに渡す.
スレッドにオブジェクトを指定させるrunメソッド.runメソッドのサブクラスオブジェクトを明確にする必要があります.
5.Threadクラスを呼び出すstartメソッドスレッドを開き、Runableインタフェースサブクラスを呼び出すrunメソッド.
関連知識ポイント:
実現方式と継承方式の違いは何ですか?
実装のメリット:単一継承の限界を回避します.
スレッドを定義する場合は、実装方法を推奨します.
Runnableインタフェースの役割は,スレッドの実行内容を確立することである.
2つの方法の違い:
継承Thread:スレッドコードはThreadサブクラスrunメソッドに格納されます.
Runnableを実装し,スレッドコードはインタフェースのサブクラスのrunメソッドに存在する.
--------androidトレーニング、javaトレーニング、java学習型技術ブログ、お客様との交流を楽しみにしています!---------