306主线程和307创建多线程程序的第一张方式_创建Thera的子类
主线程
主线程:执行main方法的线程
单线程程序:java程序中只有一个单线程
执行main方法开始,从上倒下依次执行
当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,因为它是在我们程序开始的时候就被执行的线程。
子线程都从该线程中被孵化
通常它都是最后一个执行结束的线程,因为它会执行各种的关闭操作。
public class Demo01Date { public static void main(String[] args) { Person a = new Person("乐迪"); a.run(); Person a1 = new Person("乐迪加速"); a1.run(); } }
主线程在程序启动时会被自动创建,为了能够控制它我们必须获取到它的引用,我们可以在当前类中调用currentThread()
方法来获取到,该方法返回一个当前线程的引用。
主线程默认的优先级是5,所有子线程都将继承它的优先级。
Controlling the main Thread. class CurrentThreadDemo { public static void main(String args[]) { Thread t = Thread.currentThread(); System.out.println("Current thread: " + t); // change the name of the thread t.setName("My Thread"); System.out.println("After name change: " + t); try { for(int n = 5; n > 0; n--) { System.out.println(n); Thread.sleep(1000);} } catch (InterruptedException e) { System.out.println("Main thread interrupted"); }}}
创建多线程程序的第一张方式创建Trhera的子类
Java使用java.1ang. Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是
完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码
Java使用线程执行体来代表这段程序流。
Java中通过继承 Thread类来创建并启动多线程的步骤如下
1.定义 Thread类的子类,并重写该类的run方法,该run0方法的方法体就代表了线程需要完成的任务,因此把run(方法称为线程执行体。
2.创建 Thread子类的实例,即创建了线程对象
3.调用线程对象的 start(方法来启动该线程
线程是程序更的执行线程。Java虚拟机允许应用程序并发地运行多个执行线程
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建
一个新 Thread对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当Java虛拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的main方法)。Java虚拟机会继续执行线程,直到下列任一情况出现时为止:
调用了 Runtime类的exit方法,并且安全管理器允许退出操作发生非守护线程的所有线程都已停止运行,无论是通过从对run方法的调用中返回,还是通过抛出一个传播到rum方法之外的异常。
创建新执行线程有两种方法。一种方法是将类声明为 Thread的子类。该子类应重写 Thread类的rmn方法。接下来可以分配并启动该子类的实例。
例如,计算大于某一规定值的质数的线程可以写成
/** * 创建多线程的第一种方式:创建按Thread类的子类 * jawa.Lang. Threa类:是描述线程的类,我们想要实现多线程程序,就必须继承 Thread类 * * 实现步骤 * 1.创建一个 Thread类的子类 * 2在 Threa类的子类中重写 Threa类中的run方法,设置线程任务(开启线程要做什么?) * 3创建 Thread类的子类对象4调用 Thread类中的方法 start方法,开启新的线程,执行run方因 * void start()使该线程开始执行; * Jova虚拟机调用该线程的rwn方法。结果是两个线程并发地运行; * 当前线程(main线程)和另一个线程(创建的新线程,执行其run方法)。 * 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动 */ public static void main(String[] args) { HyThread A = new HyThread(); A.state(); } public static class HyThread extends Thread{ @Override public void run() { for (int i = 0; i <20 ; i++) { System.out.println("main:"+i); } } public void state() { } }
package cn.itcast.day09.Thread; /* 创建多线程程序的第一种方式:创建Thread类的子类 实现步骤: 1.创建一个Thread类的子类 2..在Thread类的子类中重写 Thread类中的run方法,设置线程任务(开启线程要做什么?) 3.创建Thread类的子类对象 4.调用Thread类中的方法start方法,开启新的线程,执行run方法 void start()使该线程开始执行;java虚拟机调用该线程的run方法 结果是两个线程并发地运行;当前线程(main线程)和另个线程(创建的新线程,执行其run方法)。 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 java程序使用的就是抢先式调度,优先让优先级高的线程先执行,如果线程的优先级相同,那么会随机选取一个(线程随机性) */ public class Demo01Thread { public static void main(String[] args) { //3.创建Thread类的子类对象 MyThread mt=new MyThread(); //调用Thread类中的方法start方法,开启新的线程,执行run方法 mt.start(); for (int i = 0; i < 20; i++) { System.out.println("main"+i); } } }
package cn.itcast.day09.Thread;
// 1.创建一个Thread类的子类
public class MyThread extends Thread{
// 2..在Thread类的子类中重写 Thread类中的run方法,设置线程任务(开启线程要做什么?)
public void run(){
for (int i = 0; i < 20; i++) {
System.out.println("run"+i);
}
}
}