主线程与创建多线程程序的第一种方式_创建Thread类的子类
主线程
前段时间有同事提到了主线程这个名词,但当时我们说的主线程是指Java Web程序中每一个请求进来时处理逻辑的线程。当时感觉这个描述很奇怪,所以就来研究下这个主线程的确切语义。
Java提供了内置的多线程编程支持,多线程包括两个或多个可并发执行的部分,每一部分叫做线程,每个线程定义了单独的执行部分。
主线程
当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,因为它是在我们程序开始的时候就被执行的线程。
子线程都从该线程中被孵化
通常它都是最后一个执行结束的线程,因为它会执行各种的关闭操作。
package Demo_MainThread; /* 主线程:执行主(main)方法的线程 单线程程序:java程序中只有一个线程 执行main方法开始,从上到下依次执行 JVM执行main方法, main方法会进入到栈内存 JVM会找操作系统开辟一条main方法通向cpu的执行路径 cpu就可以通过这个路径来执行main方法 而这个路径有一个名字,叫main(主)线程 */ public class Demo01_MainThread { public static void main(String[] args) { Demo02_Person person01 = new Demo02_Person("大潮比"); person01.run(); System.out.println(0/0);//ArithmeticException: / by zero Demo02_Person person02 = new Demo02_Person("那些年的错过大余"); person02.run(); } }
package Demo_MainThread; public class Demo02_Person { private String name; public void run(){ //定义循环,执行20次 for (int i = 0; i < 20; i++) { System.out.println(name+"-->"+i); } } public Demo02_Person() { } public Demo02_Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Demo02_Person{" + "name='" + name + '\'' + '}'; } }
创建线程类
Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是
完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。
Java中通过继承Thread类来创建并启动多线程的步骤如下:
1.定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把
run()方法称为线程执行体。
2.创建Thread子类的实例,即创建了线程对象
3.调用线程对象的start()方法来启动该线程
package Demo_MainThread; //1创建一个Thread类的子类 public class Demo02_MyThread extends Thread { // 2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?) @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println("run"+i); } } }
package Demo_MainThread; /* 创建多线程程序的第一种方式:创建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 Demo01_Thread { public static void main(String[] args) { //3.创建Thread类的子类对象 Demo02_MyThread thread = new Demo02_MyThread(); //4.调用Thread类中的方法start方法,开启新的线程,执行run方法 thread.start(); for (int i = 0; i < 20; i++) { System.out.println("main"+i); } } }