多线程-并发编程(2)-开启新线程 定义与实例并附部分源码解析

部分源码解释在代码段的注释内

每一个 Java 程序启动后,会默认开启一个线程,称为主线程(main 方法所在的线程)

每一个线程都是一个 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,还是在主线程中执行,是错的
	}
}

看Thread源码可知start方法内是有个start0的native本地方法会向cpu,系统申请一些资源,申请到了才会执行run方法,才真正地把线程开启了,才是真正的多线程

猜你喜欢

转载自blog.csdn.net/weixin_59624686/article/details/123929905