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
*/