サーバーなどの一部のアプリケーションでは、同時実行性に応答する必要があり、次にマルチスレッドを使用する必要があります。
マルチスレッドを実現する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();
}
}
正しいメソッド:クラスコンストラクターに実装さ
れている場合はクラスメソッドを呼び出すThread
Runnable
Thread
start
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();
}
}