Java 线程基础

thread 是什么意思?

线程是表示一个流程处理的单位。
只有一个线程在执行时被称为单线程,同时运行多个线程被称为多线程。

创建一篇帖子

Thread类

使用继承Thread类的方法是第一种。
重写run方法,编写作为线程的处理。

class Sub extends Thread {
    public void read() {
       //処理
    }
}

然后,通过在该类的实例上调用start方法,将会执行run方法。

public class Main {
    public static void main(String[] args) {
        Sub sub = new Sub();
        sub.start(); //スレッド実行と表示
    }
}

class Sub extends Thread {
    public void run() {
       System.out.println("スレッド実行");
    }
}

可运行的接口

第二种方法是实现Runnable接口
Runnable接口只包含一个run()方法,因此只需要重写run()方法即可。

class Sub implements Runnable {
    public void run() {
        //処理
    }
}

1. 创建运行Runnable接口的类的实例,
2. 创建Thread类的实例时将1的实例作为参数,
3. 使用2的实例运行start方法。

public class Main {
    public static void main(String[] args) {
        Sub sub = new Sub();
        Thread thread = new Thread(sub);
        thread.start(); //スレッド実行と表示
    }
}

class Sub implements Runnable {
    public void run() {
       System.out.println("スレッド実行");
    }
}

多线程

执行多个线程。
通过创建多个继承自线程类的类实例,然后分别执行每个线程的方式。

public class Test1 {
	public static void main(String[] args) {
		Country a1 = new Country("Japan");
		Country a2 = new Country("America");

		a1.start();
		a2.start();
		System.out.println("end");
	}
}
class Country extends Thread {
	private String country;
	Country(String country) {
		this.country = country;
	}
	@Override
	public void run() {
		for (int i = 0; i < 2; i++) {
			System.out.println(country);
		}
	}
}

/* ----実行結果-----
end
Japan
Japan
America
America
*/

等待线程结束

在多线程编程中,要等待其他线程执行完毕,可以使用join方法。
join()会永久等待指定的线程执行结束。

public class Main {
    public static void main(String[] args) throws Exception {
        JoinTest t = new JoinTest();
        t.start();
        System.out.println("スレッド t の終了を待機します。");
        t.join(); // tのスレッドが終了するのを待つ
        System.out.println("スレッド t が終了しました。");
    }
}

class JoinTest extends Thread {
    public void run() {
      for (int i = 3; i >= 0 ; i--) {
        System.out.println(i);
      }
   }
}

----実行結果-----
/* 
スレッド t の終了を待機します。
3
2
1
0
スレッド t が終了しました。
*/
---joinを消した場合----
/*
スレッド t の終了を待機します。
スレッド t が終了しました。
3
2
1
0
*/
广告
将在 10 秒后关闭
bannerAds