前回の記事はマルチスレッドの基本的な理解についてです。理解したら、JAVAに戻ってマルチスレッドを実現してください。
JAVAマルチスレッドクラス:スレッドは
最初にスレッドを調べます。
上記からわかるように、マルチスレッドを作成するには2つの方法があります。
- スレッドを継承し、runメソッドを書き直します
- Runnableを実装し、ruNメソッドを書き直します
スレッドを継承する
public class Main extends Thread {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
Main test = new Main();
test.run();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
//输出结果,先输出完200多多多多敲代码,再到2000次i
部分展示:
多多多多敲代码
多多多多敲代码
多多多多敲代码
多多多多敲代码
i = 0
i = 1
i = 2
i = 3
i = 4
ただし、.startを交互に実行すると、より多くのサイクルの影響が明らかになります。
public class Main extends Thread {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
Main test = new Main();
test.start();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
//输出结果,交替执行
部分展示:
多多多多敲代码
多多多多敲代码
多多多多敲代码
i = 1
多多多多敲代码
多多多多敲代码
多多多多敲代码
Runnableインターフェースを実装する
public class TestThread implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
TestThread testThread = new TestThread();
//通过线程对象来开启我们的线程,代理
//new Thread(testThread).run();
new Thread(testThread).start();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
运行结果与上面一致,不做过多的描述
したがって、次の図が得られます。
上記の2つの実装の違いは何ですか?
-
Threadクラスを
継承する
①サブクラスはマルチスレッド機能でThreadクラスを継承する②Startメソッド:subclass.start()③非
推奨:単一継承の制限 -
Runnableインターフェースの
実現①マルチスレッド機能でRunnableを実現
②Startメソッド:ターゲットオブジェクト+スレッドobject.start()を渡す
③提案:柔軟で便利、単一継承の制限を回避
記事の内容のほとんどは個人的に整理されています。java3yによって引用された記事を参照してください。