システム運用保守シリーズのマルチスレッドアプリケーション

スレッドはプログラム実行のパスであり、プロセスには複数のスレッドを含めることができます。

マルチスレッド並列処理と同時実行の違い:
並列処理とは、2つのタスクが同時に実行され、マルチコアCPUリソースを必要とすることを意味します。同時実行とは、両方のタスクが実行を要求することを意味しますが、プロセッサは1つのタスクの実行しか受け入れることができないためです。採用する戦略は2つのタスクです。間隔が短いため、2つのタスクが同時に進行しているように感じます。つまり、並列処理に必要なCPUパフォーマンスが高くなります。

Javaプログラムの動作原理:
JavaコマンドはJava仮想マシンを起動します。JVMを起動することは、アプリケーションを起動することと同じです。つまり、メインスレッドを自動的に起動するプロセスを起動し、メインスレッドが次のメインメソッドを呼び出します。特定のクラス。Javaは少なくともガベージコレクションスレッドとメインスレッドを開始するため、マルチスレッド化されています。

マルチスレッド実装メソッド1:
Threadを継承するクラスを定義し
、runメソッドを書き直し、runメソッドで
新しいスレッドが行うことを記述
し、スレッドオブジェクトを作成し
、新しいスレッドを開くと、run()メソッドが自動的に実行されます。内部的に。
コード:

class MyThread extends Thread{
    
    
	public void run(){
    
    
		System.out.println("重写run方法");
	}
}

public static void main(String[] args){
    
    
	MyThread mt = new MyThread();
	mt.start();
}

マルチスレッド実装方法2:
、Runnableインタフェースを実装するクラスを定義します。
runメソッドを実装し、
書き込みは、新しいスレッドがrunメソッドに何をするか、
カスタムのRunnableのサブクラスのオブジェクトを作成し、
Threadオブジェクトを作成し、Runnableを渡し、
呼び出し開始するstart()メソッド新しいスレッドの場合、Runnableのrun()メソッドが内部で自動的に呼び出されます。
コード:

class MyRunnable implements Runnable{
    
    
	public void run(){
    
    
		System.out.println("重写run方法");
	}
}

public static void main(String[] args){
    
    
	MyRunnable mr = new MyRunnable();
	Thread t = new Thread(mr);
	t.start();
}

2つのメソッドの違い:
サブクラスがThreadクラスのrunメソッドをオーバーライドするため、Threadを継承します。startを呼び出すと、サブクラスのrunメソッドが直接見つかります
。Runnableを実装すると、Runnableの参照がコンストラクターに渡されます。メンバー変数は記憶されます。start()は、runメソッドを呼び出すときに、メンバー変数Runnableの参照が空かどうかを内部的に判断します。空でない場合は、コンパイルして親クラスの実行を確認し、runを実行してサブクラスの実行を確認します。
旧:あなたが直接Threadクラスのメソッドを使用することができますが、アプリケーションはシンプルですが、あなたはすでに親クラスを持っている場合は、このメソッドを使用することはできません。後者:スレッドクラス、ユーザーが定義した場合、それは問題ではありません自分には親クラスがあり、インターフェイスはさらに実装できますが、Threadクラスのメソッドを直接使用することはできません。最初に取得する必要があり、Threadオブジェクトを使用でき、コードはより複雑になります。

PS:余談:2つの実装を比較すると、最初の実装は単純ですが使用に制限があり、2番目の実装は複雑ですがより多く実装できることがわかります。完璧なものはありません。私たちは世界に開かれ、違いを残しながら共通の基盤を求め、自分自身に厳しく、他の人に寛容になりたいと思っています~~~それは長い道のりです。

おすすめ

転載: blog.csdn.net/langxiaolin/article/details/113834251