マルチスレッドを実現するJavaの2つの簡単な方法

サーバーなどの一部のアプリケーションでは、同時実行性に応答する必要があり、次にマルチスレッドを使用する必要があります。

マルチスレッドを実現する2つの方法:

  • スレッドクラスを継承する
  • Runnableインターフェースを実装する

スレッドクラスを継承する

Threadクラスを継承するrunメソッドをオーバーライドする必要があり、その後、呼び出すstart方法を、あなたが行うことができます

数値を出力するスレッドクラスを実装する
ここに画像の説明を挿入

package concurrent;

class printNumThread extends Thread
{
	String thname;
	printNumThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(int i=0; i<=26; i++) {
			System.out.printf("Thread name: %s , print num: %d\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printNumThread pt1 = new printNumThread("线程A");
		pt1.start();
		
		printNumThread pt2 = new printNumThread("线程B");
		pt2.start();
	}
}

Runnableインターフェースを実装する

Runnableインターフェースは再実行することも、作成しないこともできますが、Runnableのrunを直接呼び出してもマルチスレッドは開始されないことに注意してください。開始するには、Threadクラスコンストラクターで実装するRunnableインターフェースのオブジェクトを渡す必要があります

エラーのデモ:文字を出力するクラスを実装すると、出力がまだシリアルであることがわかります
ここに画像の説明を挿入

package concurrent;

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printCharThread pt3 = new printCharThread("线程C");
		pt3.run();
		
		printCharThread pt4 = new printCharThread("线程D");
		pt4.run();
	}
}

正しいメソッド:クラスコンストラクターに実装さ
れている場合クラスメソッドを呼び出すThreadRunnableThreadstart
ここに画像の説明を挿入

package concurrent;

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
	
		printCharThread run3 = new printCharThread("线程C");
		Thread pt3 = new Thread(run3);
		pt3.start();
		
		printCharThread run4 = new printCharThread("线程D");
		Thread pt4 = new Thread(run4);
		pt4.start();
	}
}

2つの方法:並列

ここに画像の説明を挿入

package concurrent;

class printNumThread extends Thread
{
	String thname;
	printNumThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(int i=0; i<=26; i++) {
			System.out.printf("Thread name: %s , print num: %d\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printNumThread pt1 = new printNumThread("线程A");
		pt1.start();
		
		printNumThread pt2 = new printNumThread("线程B");
		pt2.start();
		
		printCharThread run3 = new printCharThread("线程C");
		Thread pt3 = new Thread(run3);
		pt3.start();
		
		printCharThread run4 = new printCharThread("线程D");
		Thread pt4 = new Thread(run4);
		pt4.start();
	}
}
公開された262元の記事 ウォン称賛11 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_44176696/article/details/105144399