マルチスレッド-並行プログラミング(2)-部分的なソースコード分析で新しいスレッド定義とインスタンスを開きます

ソースコードの一部は、コードセグメントのコメントで説明されています

各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メソッドが実行されます。 、そしてスレッドは実際に開かれます。これは実際のマルチスレッドです。

おすすめ

転載: blog.csdn.net/weixin_59624686/article/details/123929905