スレッドクラスを作成する
Javaはjava.lang.Thread
クラスを使用してスレッドを表し、すべてのスレッドオブジェクトはThreadクラスまたはそのサブクラスのインスタンスである必要があります。各スレッドの役割は、特定のタスクを完了することです。実際には、プログラムフローのセクション、つまり、順次実行されるコードのセクションを実行することです。Javaは、スレッド実行を使用してこのプログラムフローを表します。
**メインスレッド:**メインメソッドを実行するスレッド
シングルスレッドプログラム:Javaプログラムにはスレッドが1つだけあります。実行はメインメソッドから始まり、上から下に実行されます。JVMはメインメソッドを実行し、メインメソッドはスタックに入ります。メモリの場合、JVMはメインメソッドをcpu実行パスに開くオペレーティングシステムを見つけます。cpuはこのパスを介してメインメソッドを実行できます。このパスには、メイン(メイン)スレッドと呼ばれる名前があります
。例は次のとおりです。
public class Test01MainThread {
public static void main(String[] args) {
Person p1 = new Person("小强");
p1.run();
System.out.println(0/0);//ArithmeticException: / by zero
Person p2 = new Person("小明");
p2.run();
}
}
//当出现异常以后,因为是单线程,小明的method不能执行。
動作結果:
・マルチスレッドはこの問題を改善できます
Threadクラスを継承してJavaでマルチスレッドを作成し、開始する手順は次のとおりです。
1. 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。
2. 创建Thread子类的实例,即创建了线程对象
3. 调用线程对象的start()方法来启动该线程
マルチスレッドプログラムを作成する方法:Threadクラスのサブクラスを作成し
ますjava.lang.Threadクラス:スレッドを記述するクラスです。マルチスレッドプログラムを実装する必要があります。Threadクラスを継承する必要があります。
实现步骤:
1.创建一个Thread类的子类
2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)
3.创建Thread类的子类对象
4.调用Thread类中的方法start方法,开启新的线程,执行run方法
void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
结果是两个线程并发地运行;当前线程(main线程)和另一个线程(创建的新线程,执行其 run 方法)。
多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。
java程序属于抢占式调度,那个线程的优先级高,那个线程优先执行;同一个优先级,随机选择一个执行
public class Test01Thread {
public static void main(String[] args) {
//3.创建Thread类的子类对象
MyThread mt = new MyThread();
//4.调用Thread类中的方法start方法,开启新的线程,执行run方法
mt.start();
for (int i = 0; i < 3; i++) {
System.out.println("main:"+"方法执行"+i);
}
}
}
クラスの作成:
//1.创建一个Thread类的子类
public class MyThread extends Thread{
//2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("run:"+"执行");
}
}
}
結果:
注:各実行の優先順位により、メソッドが表示される順序は異なります。