ToB企服应用市场:ToB评测及商务社交产业平台

标题: 创建线程有几种方式? [打印本页]

作者: 去皮卡多    时间: 2022-9-16 17:20
标题: 创建线程有几种方式?
创建线程的几种方式

1️⃣ 继承 Thread 类

继承 Thread 类创建线程的步骤为:
1)创建一个类继承Thread类,重写run()方法,将所要完成的任务代码写进run()方法中;
2)创建Thread类的子类的对象;
3)调用该对象的start()方法,该start()方法表示先开启线程,然后调用run()方法;
  1. @Slf4j
  2. public class ExtendsThread {
  3.     static class T extends Thread {
  4.         @Override
  5.         public void run() {
  6.             log.debug("hello");
  7.         }
  8.     }
  9.     public static void main(String[] args) {
  10.         T t = new T();
  11.         t.setName("t1");
  12.         t.start();
  13.     }
  14. }
复制代码
也可以直接使用Thread 类创建线程:
  1.     public static void main(String[] args) {
  2.         Thread t1 = new Thread(new Runnable() {
  3.             @Override
  4.             public void run() {
  5.                 log.debug("hello");
  6.             }
  7.         }, "t1");
  8.     }
复制代码
看看 Thread 类的构造器,Thread 类有多个构造器来创建需要的线程对象:
  1. // Thread.java
  2. public Thread() {}
  3. public Thread(Runnable target) {}
  4. public Thread(String name) {}
  5. public Thread(Runnable target, String name) {}
  6. // 还有几个使用线程组创建线程的构造器,就不列举了
复制代码
2️⃣ Runnable 接口配合 Thread

实现 Runnable 接口创建线程的步骤为:
1)创建一个类并实现 Runnable 接口;
2)重写 run() 方法,将所要完成的任务代码写进 run() 方法中;
3)创建实现 Runnable 接口的类的对象,将该对象当做 Thread 类的构造方法中的参数传进去;
4)使用 Thread 类的构造方法创建一个对象,并调用 start() 方法即可运行该线程;
  1. @Slf4j
  2. public class ImplRunnable {
  3.     static class T implements Runnable {
  4.         @Override
  5.         public void run() {
  6.             log.debug("hello");
  7.         }
  8.     }
  9.     public static void main(String[] args) {
  10.         Thread t1 = new Thread(new T(), "t1");
  11.         t1.start();
  12.     }
  13. }
复制代码
也可以写成这样:
  1.     public static void main(String[] args) {
  2.         Runnable task = new Runnable() {
  3.             @Override
  4.             public void run() {
  5.                 log.debug("hello");
  6.             }
  7.         };
  8.         Thread t2 = new Thread(task, "t2");
  9.         t2.start();
  10.     }
复制代码
Java 8 以后可以使用 lambda 精简代码(IDEA会有提示可将匿名内部类换成 Lambda 表达式):
  1.     public static void main(String[] args) {
  2.         Runnable task = () -> log.debug("hello");
  3.         Thread t2 = new Thread(task, "t2");
  4.         t2.start();
  5.     }
复制代码
查看一下 Runnable 接口的源码,可以看到 Runnable 接口中只有一个抽象方法 run(),这种只有一个抽象方法的接口会加上一个注解:@FunctionalInterface,那只要带有这个注解的接口就可以被Lambda表达式来简化。
  1. @FunctionalInterface
  2. public interface Runnable {
  3.     public abstract void run();
  4. }
复制代码
分析一下源码:
[code]public static void main(String[] args) {    Runnable task = () -> log.debug("hello");    Thread t2 = new Thread(task, "t2");    t2.start();}                               
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4