文章目录

  • 前言
  • 目标
  • 关键字
  • 一、定义
  • 总结
  • 参考


前言

闹里有钱,静处安身。


目标

掌握java开启多线程的两张方式

关键字

Thread,Runnable

一、定义

Java虚拟机允许应用程序具有多个并发运行的执行线程。
每个线程都有一个优先级。具有较高优先级的线程优先于具有较低优先级的线程执行。每个线程可能会也可能不会被标记为守护程序。当在某个线程中运行的代码创建新的Thread对象时,新线程的优先级最初设置为与创建线程的优先级相等,并且当且仅当创建线程是守护程序时,该线程才是守护程序线程。
当Java虚拟机启动时,通常只有一个非守护线程(通常调用某些指定类的名为main的方法)。 Java虚拟机将继续执行线程,直到发生以下任何一种情况:
已调用类Runtime的退出方法,并且安全管理器已允许进行退出操作。
不是守护程序线程的所有线程都已死,要么通过从调用返回到run方法,要么抛出传播到run方法之外的异常。
有两种方法可以创建新的执行线程。一种是将一个类声明为Thread的子类。该子类应重写Thread类的run方法。然后可以分配并启动子类的实例。例如,一个计算素数大于指定值的线程可以编写如下:

class PrimeThread extends Thread {
       long minPrime;
       PrimeThread(long minPrime) {
           this.minPrime = minPrime;
       }

       public void run() {
           // compute primes larger than minPrime
            . . .
       }
   }

下面的代码将创建一个线程并使其开始运行:

PrimeThread p = new PrimeThread(143);
       p.start();

创建线程的另一种方法是声明一个实现Runnable接口的类。然后,该类实现run方法。然后可以分配该类的实例,在创建Thread时将其作为参数传递并启动。其他样式的相同示例如下所示:

class PrimeRun implements Runnable {
       long minPrime;
       PrimeRun(long minPrime) {
           this.minPrime = minPrime;
       }

       public void run() {
           // compute primes larger than minPrime
            . . .
       }
   }

下面的代码将创建一个线程并使其开始运行:

PrimeRun p = new PrimeRun(143);
       new Thread(p).start();

每个线程都有一个名称供识别。一个以上的线程可能具有相同的名称。如果在创建线程时未指定名称,则会为其生成一个新名称。
除非另有说明,否则将null参数传递给此类中的构造函数或方法将导致引发NullPointerException。

总结

如果无需重写Thread里面的方法,一般使用 implements Runnable 的方式实现多线程

参考

多留言多点赞你们的只支持是我坚持下去的动力,都支棱起来!!!