スレッドをカスタマイズする2つの方法
実行可能なインターフェイス実装クラスをカスタマイズしてから、スレッドを作成します。つまり、実行可能なインターフェイスクラスをスレッドに渡します。
新しいスレッドまたはスレッドサブクラスを書き込み、実行方法をオーバーライドします。 (新しいスレッドと実行方法をオーバーライドすることは、実際には匿名のインナークラスへの方法です)
サンプルコード
public static void main(string [] args){newスレッド(new runnable(){@overridepublic void run(){system.out.println( "実行可能ターゲットを渡すことでスレッドを作成する!") !");};}。始める();}1および2のスレッドを構築するための上記の方法は、コード作成方法のために匿名のクラスオブジェクトで設計されています。これで、次の補助指示が作成されました。
1。最初の段落では、匿名の実行可能なインスタンスで直接渡しました。実行可能なインスタンスをカスタマイズしてから、新しいスレッド(実行可能)の形でスレッドを取得できます。
2。2番目の段落では、クラスを明確に定義して、スレッドベースクラスを拡張し、新しい新しいスレッドクラスを拡張できます。
3。これら2つのセグメントについては、新しいスレッドで匿名のクラスオブジェクトを直接作成します。変数thread1とthread2を定義し、thread1.start()thread2.start()を使用してスレッドを開始できます。
ソースコード分析
これら2つの方法の違いは何ですか? 2つの最終効果は同じです。ソースコードレベルから、デフォルトの実行方法(上書きされていない場合)は、ターゲットを呼び出す実行方法(ターゲットは空ではありません)です。ターゲットは、私たちが渡した実行可能なインターフェイスクラスです。
public synchronized void start(){if(threadStatus!= 0)Throw new IllegalThreadStateException(); group.add(this); boolean start = false; try {start0(); start = true;}最後に{if(!start){group.threadstarted(this)スレッドの開始は最終的にネイティブStart0を呼び出し、JVM仮想マシンがスレッドの実行方法を呼び出すようになります。
public void run(){if(target!= null){target.run();}}ここで、ターゲットはスレッド内の実行可能なオブジェクトです
プライベートランナブルターゲット。
要約します
スレッドを書き換える実行方法は、開始時にスレッドによって実行される実行方法です。
実行可能に渡すと、スレッドは開始時にデフォルトの実行方法を実行します。実行方法は、合格したターゲットを呼び出し、ターゲットの実行方法を呼び出します。
両方の効果は同じです。ここでは、コードの詳細の違いを確認するためだけです。
上記は、編集者によって導入されたJavaスレッドの開始方法と実行方法の包括的な分析です。私はそれが誰にでも役立つことを願っています。もっと知りたい場合は、wulin.comに注意してください!