まず、Threadクラスの継承
Threadクラスは、スレッドを表し、スレッドのインスタンスを確立するために、新しいスレッドのニーズを開始するオブジェクトをインスタンス化するクラスから、クラスjava.langパッケージです
次のようにスレッドが設定さ:
公共のスレッド():新しいスレッドオブジェクトを作成します。
公共のスレッド(文字列のthreadName):のthreadNameスレッドオブジェクトの名前を作成します。
新しいスレッドの構文を作成するために、Threadクラスを継承し、次のとおりです。
パブリック クラス ThreadTestは延び{スレッド }
クラスは、スレッドクラスから継承するクラス()メソッドの実際の機能、上ねじコードの実行を完了し、run()メソッドをオーバーライドすることができるクラスは、機能を実装するコードは、スレッドの実行に書き込まれる()メソッドその後、クラス開始(run()メソッドを呼び出して実行方法、の0スレッドをスレッドを同時に呼び出します。
Threadオブジェクトがタスクを実行する必要がある、タスクは起動時にワーカースレッドを指し、仕事関数のコードは、run()メソッドで記述されています。
()メソッドの構文を実行します。
公共 ボイドラン(){
}
注意:
start()メソッドは、スレッドが開始されて呼び出された場合、システムは、例外がスローされますIllegalThreadException
プログラムスレッドを実行しますが、自動的にスレッドを生成します場合は、他のスレッドが起動しないときには、このスレッドで実行されている主な方法は、プログラムはシングルスレッドプログラムであります
次のようにスレッド・コードを起動します。
パブリック静的 ボイドメイン(システム[]引数){ 新しいThreadTest())(始めます。 }
例1:
プロジェクトで作成ThreadTestクラスは、クラスの継承Threadクラスのメソッドは、スレッドを作成します
パッケージ継承Threadクラス; パブリック クラス ThreadTest 拡張スレッド{ // 指定されたクラスは、Threadクラスを継承 プライベート int型の COUNT = 10 ; 公共 ボイドラン(){ // のオーバーライドrun()メソッド ながら、(真の){ System.out.printlnは(COUNT +「」); // プリントカウント変数 場合(--count == 0){ // 使用カウント変数が0の場合にデクリメントデクリメントされ、ループ終了が 返さ; } } } パブリック 静的 ボイドメイン(文字列[]引数){ 新しいThreadTest())(始めます。 } }
結果:
上述した例、Threadクラスを継承し、その後通常エンドレスループの形態で使用されるクラスのrun()メソッドを覆う、あまりにので、例えばこの例では、変数の使用など、ループの条件を指定するために、無期限に行くスレッドである、カウントループのうち条件として0まで減少。
mainメソッドでは、スレッドの実行がThreadクラスのstart()メソッドを呼び出す必要がありますが、start()メソッドを使用する余裕がない場合は、start()メソッドは、実行に覆われた()メソッドが呼び出され、スレッドはmainメソッドで開始したことがありませんないコールは前に()メソッドは、スレッドオブジェクトのインスタンスだけではなくスレッドを起動しません。
第二に、Runnableを実装
Javaは多重継承をサポートしていないため、GUIプログラムのJFrame拡張クラスは、もはや、Threadクラスを継承することはできません。あなたはマルチスレッド現在のクラスを使用したい場合は、インタフェースを実行可能なことができます。
次の構文を達成するために、Runnableインタフェース:
パブリック クラススレッドは、拡張オブジェクトが実装して Runnableを
説明:
run()メソッドは、Runnableインタフェースのrun()メソッドに具現化される実質的Threadクラスは、Runnableインタフェースを実装します。
プログラムでは、Runnableをオブジェクトに関連付けられたスレッド・オブジェクトとRunnableをThreadオブジェクトを作成して実装します。
Threadクラスのコンストラクタは、次の2つのメソッドがあります。
公共のスレッド(Runnableを対象)
公共のスレッド(Runnableをターゲット、文字列名)
上記の方法を用いて、これら2つのパラメータのRunnable本構築方法の例は、インスタンスに関連付けられた実行可能スレッドのインスタンスを構成することができます。
新しいスレッドを開始、次を使用して、Runnableインタフェースをステップ;
(1)Runnableオブジェクトを確立します
(2)パラメータの例には、スレッドRunnableオブジェクトのコンストラクタを作成します
(3)スレッドを起動する()メソッドを開始するために呼び出します
スレッドを作成するには、Runnableインタフェース、、Runnableインタフェースを実装するクラスを作成するためにあなた最初の必要性を通じ、その後、これRunnableオブジェクトを確立し、そのクラスのオブジェクトをインスタンス化し、次のスレッドインスタンスは、適切なコンストラクタを使用して作成された、Threadクラスの呼び出しの最後のインスタンスを使用しますstart()メソッドは、スレッドを開始する。図1は、実装プロセスのRunnableインターフェースはスレッドを作成することを示しています
図1
例2
スレッドを作成するためのRunnable方法を実装
パッケージ例2; / ** *实现Runnableを接口方式创建线程 * @author yangf * * / パブリック クラス MyRunnable 実装したRunnable { // 实现Runnableを接口 @Override 公共 のボイドの実行(){ // TODOメソッドスタブを自動的に生成 するために(int型 I = 0 ; I <100; iが++ ){ 。のSystem.out.println(にThread.currentThread()のgetName() + ":" + I)。 } } パブリック 静的 ボイドメイン(文字列[]引数){ //1.スレッドオブジェクト作成 のRunnable myRunnable = 新しい新しい)MyRunnableを(; // スレッドTは= 新しい新しいスレッド(myRunnable、 "MyThread" ); t.start(); // スレッドを開始 } }
結果:0-99
注意:
直接スレッドサブクラスのオブジェクトのrun()メソッドを呼び出して、スタートスレッドのサブクラス()メソッドを呼び出して、Threadクラスを開始()メソッドは、スレッドのサブクラスを実行し、新しいスレッドを作成していない、新しいスレッドを開始します()メソッドを実行します。
第三に、要約
スレッドオブジェクトのstart()メソッドを呼び出し、run()メソッドの違いを呼び出します。
実行():メインスレッドだけ実行パス
開始():実行複数の経路、メインスレッドと子スレッドを交互に並行して行われます