ソースコードの一部は、コードセグメントのコメントで説明されています
各Javaプログラムが起動すると、デフォルトでメインスレッド(メインメソッドが配置されているスレッド)と呼ばれるスレッドが開かれます。
各スレッドはjava.lang.Threadオブジェクトであり、現在のスレッドオブジェクトはThread.currentThreadメソッドを介して取得できます。
スレッドを開始する2つの方法
(1)Runnableインスタンスを渡し、子スレッドが実行する必要のあるタスクをrunメソッドに記述します。
//第1种方法
public class Main {
public static void main(String[] a) {
Thread tj = new Thread(new Runnable() {
@Override
public void run() {//把线程想执行的任务写在run方法里即可
System.out.println("新线程的名字 - "+Thread.currentThread().getName());
}
});
tj.setName("汤键");//更改线程名称为“汤键” 不更改默认为Thread-0
tj.setPriority(10);//更改线程优先级为10 不更改默认为普通优先级为5 线程优先级范围为1—10 数值越大优先级越高
tj.start();//启动线程;Thread调用start方法后,内部会调用线程自己的run方法
}
}//可用Lambda表达式优化
(2)Threadクラスを継承し、runメソッドをオーバーライドします
//第2种方法
class tt extends Thread{
public void run() {
//System.out.println("新线程的名字 - "+getName());
//使用getName()不会准确知道当前代码执行在哪一线程,只会返回new时内部分配的固定名称,它不会管你线程是否启动成功,都会分配这个名字
System.out.println("新线程的名字 - "+Thread.currentThread().getName());
}
}
public class Main {
public static void main(String[] a) {
Thread tj = new tt();
tj.setName("汤键");
tj.setPriority(10);
tj.start();
//直接调用run方法不调用start方法相当于没继承Thread,还是在主线程中执行,是错的
}
}
スレッドのソースコードを見ると、startメソッドにstart0のネイティブローカルメソッドがあり、CPUとシステムに一部のリソースが適用されます。アプリケーションを受信した場合にのみ、runメソッドが実行されます。 、そしてスレッドは実際に開かれます。これは実際のマルチスレッドです。